{
  "fileName": "ERC721PresetMinterPauserAutoId.sol",
  "contractName": "ERC721PresetMinterPauserAutoId",
  "source": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"../access/AccessControl.sol\";\nimport \"../GSN/Context.sol\";\nimport \"../utils/Counters.sol\";\nimport \"../token/ERC721/ERC721.sol\";\nimport \"../token/ERC721/ERC721Burnable.sol\";\nimport \"../token/ERC721/ERC721Pausable.sol\";\n\n/**\n * @dev {ERC721} token, including:\n *\n *  - ability for holders to burn (destroy) their tokens\n *  - a minter role that allows for token minting (creation)\n *  - a pauser role that allows to stop all token transfers\n *  - token ID and URI autogeneration\n *\n * This contract uses {AccessControl} to lock permissioned functions using the\n * different roles - head to its documentation for details.\n *\n * The account that deploys the contract will be granted the minter and pauser\n * roles, as well as the default admin role, which will let it grant both minter\n * and pauser roles to other accounts.\n */\ncontract ERC721PresetMinterPauserAutoId is Context, AccessControl, ERC721Burnable, ERC721Pausable {\n    using Counters for Counters.Counter;\n\n    bytes32 public constant MINTER_ROLE = keccak256(\"MINTER_ROLE\");\n    bytes32 public constant PAUSER_ROLE = keccak256(\"PAUSER_ROLE\");\n\n    Counters.Counter private _tokenIdTracker;\n\n    /**\n     * @dev Grants `DEFAULT_ADMIN_ROLE`, `MINTER_ROLE` and `PAUSER_ROLE` to the\n     * account that deploys the contract.\n     *\n     * Token URIs will be autogenerated based on `baseURI` and their token IDs.\n     * See {ERC721-tokenURI}.\n     */\n    constructor(string memory name, string memory symbol, string memory baseURI) ERC721(name, symbol) {\n        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());\n\n        _setupRole(MINTER_ROLE, _msgSender());\n        _setupRole(PAUSER_ROLE, _msgSender());\n\n        _setBaseURI(baseURI);\n    }\n\n    /**\n     * @dev Creates a new token for `to`. Its token ID will be automatically\n     * assigned (and available on the emitted {IERC721-Transfer} event), and the token\n     * URI autogenerated based on the base URI passed at construction.\n     *\n     * See {ERC721-_mint}.\n     *\n     * Requirements:\n     *\n     * - the caller must have the `MINTER_ROLE`.\n     */\n    function mint(address to) public virtual {\n        require(hasRole(MINTER_ROLE, _msgSender()), \"ERC721PresetMinterPauserAutoId: must have minter role to mint\");\n\n        // We can just use balanceOf to create the new tokenId because tokens\n        // can be burned (destroyed), so we need a separate counter.\n        _mint(to, _tokenIdTracker.current());\n        _tokenIdTracker.increment();\n    }\n\n    /**\n     * @dev Pauses all token transfers.\n     *\n     * See {ERC721Pausable} and {Pausable-_pause}.\n     *\n     * Requirements:\n     *\n     * - the caller must have the `PAUSER_ROLE`.\n     */\n    function pause() public virtual {\n        require(hasRole(PAUSER_ROLE, _msgSender()), \"ERC721PresetMinterPauserAutoId: must have pauser role to pause\");\n        _pause();\n    }\n\n    /**\n     * @dev Unpauses all token transfers.\n     *\n     * See {ERC721Pausable} and {Pausable-_unpause}.\n     *\n     * Requirements:\n     *\n     * - the caller must have the `PAUSER_ROLE`.\n     */\n    function unpause() public virtual {\n        require(hasRole(PAUSER_ROLE, _msgSender()), \"ERC721PresetMinterPauserAutoId: must have pauser role to unpause\");\n        _unpause();\n    }\n\n    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override(ERC721, ERC721Pausable) {\n        super._beforeTokenTransfer(from, to, tokenId);\n    }\n}\n",
  "sourcePath": "contracts/presets/ERC721PresetMinterPauserAutoId.sol",
  "sourceMap": "891:2605:75:-:0;;;1476:285;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1560:4;1566:6;742:40:10;418:10;761:20;;742:18;;;:40;;:::i;:::-;3640:4:92;3632:5;:12;;;;;;;;;;;;:::i;:::-;;3664:6;3654:7;:16;;;;;;;;;;;;:::i;:::-;;3758:40;2732:10;3777:20;;3758:18;;;:40;;:::i;:::-;3808:49;3064:10;3827:29;;3808:18;;;:49;;:::i;:::-;3867:51;3437:10;3886:31;;3867:18;;;:51;;:::i;:::-;3567:358;;924:5:110;914:7;;:15;;;;;;;;;;;;;;;;;;1584:44:75::1;1762:4:6;1595:18:75::0;::::1;1615:12;:10;;;:12;;:::i;:::-;1584:10;;;:44;;:::i;:::-;1639:37;1075:24;1663:12;:10;;;:12;;:::i;:::-;1639:10;;;:37;;:::i;:::-;1686;1143:24;1710:12;:10;;;:12;;:::i;:::-;1686:10;;;:37;;:::i;:::-;1734:20;1746:7;1734:11;;;:20;;:::i;:::-;1476:285:::0;;;891:2605;;1473:198:10;1571:10;1556:25;;:11;:25;;;;;1548:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1660:4;1624:20;:33;1645:11;1624:33;;;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;1473:198;:::o;590:104:0:-;643:15;677:10;670:17;;590:104;:::o;6578:110:6:-;6656:25;6667:4;6673:7;6656:10;;;:25;;:::i;:::-;6578:110;;:::o;14642:98:92:-;14725:8;14714;:19;;;;;;;;;;;;:::i;:::-;;14642:98;:::o;7015:184:6:-;7088:33;7113:7;7088:6;:12;7095:4;7088:12;;;;;;;;;;;:20;;:24;;;;;;:33;;;;:::i;:::-;7084:109;;;7169:12;:10;;;:12;;:::i;:::-;7142:40;;7160:7;7142:40;;7154:4;7142:40;;;;;;;;;;7084:109;7015:184;;:::o;4864:141:109:-;4934:4;4957:41;4962:3;:10;;4990:5;4982:14;;4974:23;;4957:4;;;:41;;:::i;:::-;4950:48;;4864:141;;;;:::o;1611:404::-;1674:4;1695:21;1705:3;1710:5;1695:9;;;:21;;:::i;:::-;1690:319;;1732:3;:11;;1749:5;1732:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1912:3;:11;;:18;;;;1890:3;:12;;:19;1903:5;1890:19;;;;;;;;;;;:40;;;;1951:4;1944:11;;;;1690:319;1993:5;1986:12;;1611:404;;;;;:::o;3776:127::-;3849:4;3895:1;3872:3;:12;;:19;3885:5;3872:19;;;;;;;;;;;;:24;;3865:31;;3776:127;;;;:::o;891:2605:75:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
  "deployedSourceMap": "891:2605:75:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;939:140:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4481:90:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7088:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6646:381;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6156:200;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7936:300;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4272:112:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4634:223;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5933:152:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5808:205:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3121:182:75;;;:::i;:::-;;8302:149:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;445:241:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6428:161:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1031:76:110;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4252:167:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2136:397:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5767:87:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3984:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2737:176:75;;;:::i;:::-;;3955:136:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2940:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4635:94:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1717:49:6;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7364:290:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8517:282;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4795:740;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3245:125:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1037:62:75;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5091:226:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1105:62:75;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7720:154:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;939:140:10;1016:4;1039:20;:33;1060:11;1039:33;;;;;;;;;;;;;;;;;;;;;;;;;;;1032:40;;939:140;;;:::o;4481:90:92:-;4527:13;4559:5;4552:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4481:90;:::o;7088:209::-;7156:7;7183:16;7191:7;7183;:16::i;:::-;7175:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7266:15;:24;7282:7;7266:24;;;;;;;;;;;;;;;;;;;;;7259:31;;7088:209;;;:::o;6646:381::-;6726:13;6742:16;6750:7;6742;:16::i;:::-;6726:32;;6782:5;6776:11;;:2;:11;;;;6768:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6860:5;6844:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;6869:37;6886:5;6893:12;:10;:12::i;:::-;6869:16;:37::i;:::-;6844:62;6836:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6999:21;7008:2;7012:7;6999:8;:21::i;:::-;6646:381;;;:::o;6156:200::-;6209:7;6328:21;:12;:19;:21::i;:::-;6321:28;;6156:200;:::o;7936:300::-;8095:41;8114:12;:10;:12::i;:::-;8128:7;8095:18;:41::i;:::-;8087:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8201:28;8211:4;8217:2;8221:7;8201:9;:28::i;:::-;7936:300;;;:::o;4272:112:6:-;4329:7;4355:6;:12;4362:4;4355:12;;;;;;;;;;;:22;;;4348:29;;4272:112;;;:::o;4634:223::-;4717:45;4725:6;:12;4732:4;4725:12;;;;;;;;;;;:22;;;4749:12;:10;:12::i;:::-;4717:7;:45::i;:::-;4709:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4825:25;4836:4;4842:7;4825:10;:25::i;:::-;4634:223;;:::o;5933:152:92:-;6022:7;6048:30;6072:5;6048:13;:20;6062:5;6048:20;;;;;;;;;;;;;;;:23;;:30;;;;:::i;:::-;6041:37;;5933:152;;;;:::o;5808:205:6:-;5905:12;:10;:12::i;:::-;5894:23;;:7;:23;;;5886:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5980:26;5992:4;5998:7;5980:11;:26::i;:::-;5808:205;;:::o;3121:182:75:-;3173:34;1143:24;3194:12;:10;:12::i;:::-;3173:7;:34::i;:::-;3165:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3286:10;:8;:10::i;:::-;3121:182::o;8302:149:92:-;8405:39;8422:4;8428:2;8432:7;8405:39;;;;;;;;;;;;:16;:39::i;:::-;8302:149;;;:::o;445:241:93:-;561:41;580:12;:10;:12::i;:::-;594:7;561:18;:41::i;:::-;553:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;665:14;671:7;665:5;:14::i;:::-;445:241;:::o;6428:161:92:-;6495:7;6515:15;6536:22;6552:5;6536:12;:15;;:22;;;;:::i;:::-;6514:44;;;6575:7;6568:14;;;6428:161;;;:::o;1031:76:110:-;1070:4;1093:7;;;;;;;;;;;1086:14;;1031:76;:::o;4252:167:92:-;4316:7;4342:70;4359:7;4342:70;;;;;;;;;;;;;;;;;:12;:16;;:70;;;;;:::i;:::-;4335:77;;4252:167;;;:::o;2136:397:75:-;2195:34;1075:24;2216:12;:10;:12::i;:::-;2195:7;:34::i;:::-;2187:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2453:36;2459:2;2463:25;:15;:23;:25::i;:::-;2453:5;:36::i;:::-;2499:27;:15;:25;:27::i;:::-;2136:397;:::o;5767:87:92:-;5807:13;5839:8;5832:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5767:87;:::o;3984:211::-;4048:7;4092:1;4075:19;;:5;:19;;;;4067:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4159:29;:13;:20;4173:5;4159:20;;;;;;;;;;;;;;;:27;:29::i;:::-;4152:36;;3984:211;;;:::o;2737:176:75:-;2787:34;1143:24;2808:12;:10;:12::i;:::-;2787:7;:34::i;:::-;2779:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2898:8;:6;:8::i;:::-;2737:176::o;3955:136:6:-;4028:7;4054:30;4078:5;4054:6;:12;4061:4;4054:12;;;;;;;;;;;:20;;:23;;:30;;;;:::i;:::-;4047:37;;3955:136;;;;:::o;2940:137::-;3009:4;3032:38;3062:7;3032:6;:12;3039:4;3032:12;;;;;;;;;;;:20;;:29;;:38;;;;:::i;:::-;3025:45;;2940:137;;;;:::o;4635:94:92:-;4683:13;4715:7;4708:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4635:94;:::o;1717:49:6:-;1762:4;1717:49;;;:::o;7364:290:92:-;7478:12;:10;:12::i;:::-;7466:24;;:8;:24;;;;7458:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7576:8;7531:18;:32;7550:12;:10;:12::i;:::-;7531:32;;;;;;;;;;;;;;;:42;7564:8;7531:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;7628:8;7599:48;;7614:12;:10;:12::i;:::-;7599:48;;;7638:8;7599:48;;;;;;;;;;;;;;;;;;;;7364:290;;:::o;8517:282::-;8648:41;8667:12;:10;:12::i;:::-;8681:7;8648:18;:41::i;:::-;8640:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8753:39;8767:4;8773:2;8777:7;8786:5;8753:13;:39::i;:::-;8517:282;;;;:::o;4795:740::-;4860:13;4893:16;4901:7;4893;:16::i;:::-;4885:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4972:23;4998:10;:19;5009:7;4998:19;;;;;;;;;;;4972:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5116:1;5096:8;5090:22;;;;;;;;;;;;;;;;:27;5086:74;;;5140:9;5133:16;;;;;5086:74;5288:1;5268:9;5262:23;:27;5258:110;;;5336:8;5346:9;5319:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5305:52;;;;;5258:110;5498:8;5508:18;:7;:16;:18::i;:::-;5481:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5467:61;;;4795:740;;;;:::o;3245:125:6:-;3308:7;3334:29;:6;:12;3341:4;3334:12;;;;;;;;;;;:20;;:27;:29::i;:::-;3327:36;;3245:125;;;:::o;1037:62:75:-;1075:24;1037:62;:::o;5091:226:6:-;5175:45;5183:6;:12;5190:4;5183:12;;;;;;;;;;;:22;;;5207:12;:10;:12::i;:::-;5175:7;:45::i;:::-;5167:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5284:26;5296:4;5302:7;5284:11;:26::i;:::-;5091:226;;:::o;1105:62:75:-;1143:24;1105:62;:::o;7720:154:92:-;7809:4;7832:18;:25;7851:5;7832:25;;;;;;;;;;;;;;;:35;7858:8;7832:35;;;;;;;;;;;;;;;;;;;;;;;;;7825:42;;7720:154;;;;:::o;4864:141:109:-;4934:4;4957:41;4962:3;:10;;4990:5;4982:14;;4974:23;;4957:4;:41::i;:::-;4950:48;;4864:141;;;;:::o;10232:117:92:-;10289:4;10312:30;10334:7;10312:12;:21;;:30;;;;:::i;:::-;10305:37;;10232:117;;;:::o;590:104:0:-;643:15;677:10;670:17;;590:104;:::o;15888:155:92:-;15980:2;15953:15;:24;15969:7;15953:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;16028:7;16024:2;15997:39;;16006:16;16014:7;16006;:16::i;:::-;15997:39;;;;;;;;;;;;15888:155;;:::o;7023:121:108:-;7092:7;7118:19;7126:3;:10;;7118:7;:19::i;:::-;7111:26;;7023:121;;;:::o;10507:329:92:-;10592:4;10616:16;10624:7;10616;:16::i;:::-;10608:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10691:13;10707:16;10715:7;10707;:16::i;:::-;10691:32;;10752:5;10741:16;;:7;:16;;;:51;;;;10785:7;10761:31;;:20;10773:7;10761:11;:20::i;:::-;:31;;;10741:51;:87;;;;10796:32;10813:5;10820:7;10796:16;:32::i;:::-;10741:87;10733:96;;;10507:329;;;;:::o;13501:559::-;13618:4;13598:24;;:16;13606:7;13598;:16::i;:::-;:24;;;13590:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13700:1;13686:16;;:2;:16;;;;13678:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13754:39;13775:4;13781:2;13785:7;13754:20;:39::i;:::-;13855:29;13872:1;13876:7;13855:8;:29::i;:::-;13895:35;13922:7;13895:13;:19;13909:4;13895:19;;;;;;;;;;;;;;;:26;;:35;;;;:::i;:::-;;13940:30;13962:7;13940:13;:17;13954:2;13940:17;;;;;;;;;;;;;;;:21;;:30;;;;:::i;:::-;;13981:29;13998:7;14007:2;13981:12;:16;;:29;;;;;:::i;:::-;;14045:7;14041:2;14026:27;;14035:4;14026:27;;;;;;;;;;;;13501:559;;;:::o;7015:184:6:-;7088:33;7113:7;7088:6;:12;7095:4;7088:12;;;;;;;;;;;:20;;:24;;:33;;;;:::i;:::-;7084:109;;;7169:12;:10;:12::i;:::-;7142:40;;7160:7;7142:40;;7154:4;7142:40;;;;;;;;;;7084:109;7015:184;;:::o;7649:135:109:-;7720:7;7754:22;7758:3;:10;;7770:5;7754:3;:22::i;:::-;7746:31;;7739:38;;7649:135;;;;:::o;7205:188:6:-;7279:36;7307:7;7279:6;:12;7286:4;7279:12;;;;;;;;;;;:20;;:27;;:36;;;;:::i;:::-;7275:112;;;7363:12;:10;:12::i;:::-;7336:40;;7354:7;7336:40;;7348:4;7336:40;;;;;;;;;;7275:112;7205:188;;:::o;2033:117:110:-;1601:7;;;;;;;;;;;1593:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2101:5:::1;2091:7;;:15;;;;;;;;;;;;;;;;;;2121:22;2130:12;:10;:12::i;:::-;2121:22;;;;;;;;;;;;;;;;;;;;2033:117::o:0;12675:502:92:-;12734:13;12750:16;12758:7;12750;:16::i;:::-;12734:32;;12777:48;12798:5;12813:1;12817:7;12777:20;:48::i;:::-;12863:29;12880:1;12884:7;12863:8;:29::i;:::-;12979:1;12948:10;:19;12959:7;12948:19;;;;;;;;;;;12942:33;;;;;;;;;;;;;;;;:38;12938:95;;13003:10;:19;13014:7;13003:19;;;;;;;;;;;;12996:26;;;;:::i;:::-;12938:95;13043:36;13071:7;13043:13;:20;13057:5;13043:20;;;;;;;;;;;;;;;:27;;:36;;;;:::i;:::-;;13090:28;13110:7;13090:12;:19;;:28;;;;:::i;:::-;;13162:7;13158:1;13134:36;;13143:5;13134:36;;;;;;;;;;;;12675:502;;:::o;7472:224:108:-;7552:7;7561;7581:11;7594:13;7611:22;7615:3;:10;;7627:5;7611:3;:22::i;:::-;7580:53;;;;7659:3;7651:12;;7681:5;7673:14;;7643:46;;;;;;7472:224;;;;;:::o;8115:202::-;8222:7;8264:44;8269:3;:10;;8289:3;8281:12;;8295;8264:4;:44::i;:::-;8256:53;;8241:69;;8115:202;;;;;:::o;1098:112:106:-;1163:7;1189;:14;;;1182:21;;1098:112;;;:::o;12065:393:92:-;12158:1;12144:16;;:2;:16;;;;12136:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12216:16;12224:7;12216;:16::i;:::-;12215:17;12207:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12276:45;12305:1;12309:2;12313:7;12276:20;:45::i;:::-;12332:30;12354:7;12332:13;:17;12346:2;12332:17;;;;;;;;;;;;;;;:21;;:30;;;;:::i;:::-;;12373:29;12390:7;12399:2;12373:12;:16;;:29;;;;;:::i;:::-;;12443:7;12439:2;12418:33;;12435:1;12418:33;;;;;;;;;;;;12065:393;;:::o;1216:178:106:-;1386:1;1368:7;:14;;;:19;;;;;;;;;;;1216:178;:::o;7205:112:109:-;7265:7;7291:19;7299:3;:10;;7291:7;:19::i;:::-;7284:26;;7205:112;;;:::o;1786:115:110:-;1337:7;;;;;;;;;;;1336:8;1328:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1855:4:::1;1845:7;;:14;;;;;;;;;;;;;;;;;;1874:20;1881:12;:10;:12::i;:::-;1874:20;;;;;;;;;;;;;;;;;;;;1786:115::o:0;6085:147:109:-;6159:7;6201:22;6205:3;:10;;6217:5;6201:3;:22::i;:::-;6193:31;;6178:47;;6085:147;;;;:::o;5401:156::-;5481:4;5504:46;5514:3;:10;;5542:5;5534:14;;5526:23;;5504:9;:46::i;:::-;5497:53;;5401:156;;;;:::o;9660:269:92:-;9773:28;9783:4;9789:2;9793:7;9773:9;:28::i;:::-;9819:48;9842:4;9848:2;9852:7;9861:5;9819:22;:48::i;:::-;9811:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9660:269;;;;:::o;202:723:113:-;258:13;484:1;475:5;:10;471:51;;;501:10;;;;;;;;;;;;;;;;;;;;;471:51;531:12;546:5;531:20;;561:14;585:75;600:1;592:4;:9;585:75;;617:8;;;;;;;647:2;639:10;;;;;;;;;585:75;;;669:19;701:6;691:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;669:39;;718:13;743:1;734:6;:10;718:26;;761:5;754:12;;776:112;791:1;783:4;:9;776:112;;849:2;842:4;:9;;;;;;837:2;:14;826:27;;808:6;815:7;;;;;;;808:15;;;;;;;;;;;:45;;;;;;;;;;;875:2;867:10;;;;;;;;;776:112;;;911:6;897:21;;;;;;202:723;;;;:::o;5638:115:109:-;5701:7;5727:19;5735:3;:10;;5727:7;:19::i;:::-;5720:26;;5638:115;;;:::o;1611:404::-;1674:4;1695:21;1705:3;1710:5;1695:9;:21::i;:::-;1690:319;;1732:3;:11;;1749:5;1732:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1912:3;:11;;:18;;;;1890:3;:12;;:19;1903:5;1890:19;;;;;;;;;;;:40;;;;1951:4;1944:11;;;;1690:319;1993:5;1986:12;;1611:404;;;;;:::o;6791:149:108:-;6875:4;6898:35;6908:3;:10;;6928:3;6920:12;;6898:9;:35::i;:::-;6891:42;;6791:149;;;;:::o;4483:108::-;4539:7;4565:3;:12;;:19;;;;4558:26;;4483:108;;;:::o;3309:185:75:-;3442:45;3469:4;3475:2;3479:7;3442:26;:45::i;:::-;3309:185;;;:::o;6764:135:109:-;6834:4;6857:35;6865:3;:10;;6885:5;6877:14;;6857:7;:35::i;:::-;6850:42;;6764:135;;;;:::o;6467:129::-;6534:4;6557:32;6562:3;:10;;6582:5;6574:14;;6557:4;:32::i;:::-;6550:39;;6467:129;;;;:::o;6239:174:108:-;6328:4;6351:55;6356:3;:10;;6376:3;6368:12;;6398:5;6390:14;;6382:23;;6351:4;:55::i;:::-;6344:62;;6239:174;;;;;:::o;4423:201:109:-;4490:7;4538:5;4517:3;:11;;:18;;;;:26;4509:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4599:3;:11;;4611:5;4599:18;;;;;;;;;;;;;;;;4592:25;;4423:201;;;;:::o;5173:147::-;5246:4;5269:44;5277:3;:10;;5305:5;5297:14;;5289:23;;5269:7;:44::i;:::-;5262:51;;5173:147;;;;:::o;6572:140:108:-;6649:4;6672:33;6680:3;:10;;6700:3;6692:12;;6672:7;:33::i;:::-;6665:40;;6572:140;;;;:::o;4934:274::-;5001:7;5010;5059:5;5037:3;:12;;:19;;;;:27;5029:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5114:22;5139:3;:12;;5152:5;5139:19;;;;;;;;;;;;;;;;;;5114:44;;5176:5;:10;;;5188:5;:12;;;5168:33;;;;;4934:274;;;;;:::o;5615:315::-;5709:7;5728:16;5747:3;:12;;:17;5760:3;5747:17;;;;;;;;;;;;5728:36;;5794:1;5782:8;:13;;5797:12;5774:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5863:3;:12;;5887:1;5876:8;:12;5863:26;;;;;;;;;;;;;;;;;;:33;;;5856:40;;;5615:315;;;;;:::o;3984:107:109:-;4040:7;4066:3;:11;;:18;;;;4059:25;;3984:107;;;:::o;3776:127::-;3849:4;3895:1;3872:3;:12;;:19;3885:5;3872:19;;;;;;;;;;;;:24;;3865:31;;3776:127;;;;:::o;15293:589:92:-;15413:4;15438:15;:2;:13;;;:15::i;:::-;15433:58;;15476:4;15469:11;;;;15433:58;15500:23;15526:246;15578:45;;;15637:12;:10;:12::i;:::-;15663:4;15681:7;15702:5;15542:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15526:246;;;;;;;;;;;;;;;;;:2;:15;;;;:246;;;;;:::i;:::-;15500:272;;15782:13;15809:10;15798:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15782:48;;1068:10;15858:16;;15848:26;;;:6;:26;;;;15840:35;;;;15293:589;;;;;;;:::o;4270:123:108:-;4341:4;4385:1;4364:3;:12;;:17;4377:3;4364:17;;;;;;;;;;;;:22;;4357:29;;4270:123;;;;:::o;587:237:95:-;696:45;723:4;729:2;733:7;696:26;:45::i;:::-;761:8;:6;:8::i;:::-;760:9;752:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;587:237;;;:::o;2183:1512:109:-;2249:4;2365:18;2386:3;:12;;:19;2399:5;2386:19;;;;;;;;;;;;2365:40;;2434:1;2420:10;:15;2416:1273;;2777:21;2814:1;2801:10;:14;2777:38;;2829:17;2870:1;2849:3;:11;;:18;;;;:22;2829:42;;3111:17;3131:3;:11;;3143:9;3131:22;;;;;;;;;;;;;;;;3111:42;;3274:9;3245:3;:11;;3257:13;3245:26;;;;;;;;;;;;;;;:38;;;;3391:1;3375:13;:17;3349:3;:12;;:23;3362:9;3349:23;;;;;;;;;;;:43;;;;3498:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;3590:3;:12;;:19;3603:5;3590:19;;;;;;;;;;;3583:26;;;3631:4;3624:11;;;;;;;;2416:1273;3673:5;3666:12;;;2183:1512;;;;;:::o;1828:678:108:-;1904:4;2018:16;2037:3;:12;;:17;2050:3;2037:17;;;;;;;;;;;;2018:36;;2081:1;2069:8;:13;2065:435;;;2135:3;:12;;2153:38;;;;;;;;2170:3;2153:38;;;;2183:5;2153:38;;;2135:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2347:3;:12;;:19;;;;2327:3;:12;;:17;2340:3;2327:17;;;;;;;;;;;:39;;;;2387:4;2380:11;;;;;2065:435;2458:5;2422:3;:12;;2446:1;2435:8;:12;2422:26;;;;;;;;;;;;;;;;;;:33;;:41;;;;2484:5;2477:12;;;1828:678;;;;;;:::o;2674:1517::-;2738:4;2852:16;2871:3;:12;;:17;2884:3;2871:17;;;;;;;;;;;;2852:36;;2915:1;2903:8;:13;2899:1286;;3259:21;3294:1;3283:8;:12;3259:36;;3309:17;3351:1;3329:3;:12;;:19;;;;:23;3309:43;;3592:26;3621:3;:12;;3634:9;3621:23;;;;;;;;;;;;;;;;;;3592:52;;3766:9;3736:3;:12;;3749:13;3736:27;;;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;;3888:1;3872:13;:17;3841:3;:12;;:28;3854:9;:14;;;3841:28;;;;;;;;;;;:48;;;;3995:3;:12;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4088:3;:12;;:17;4101:3;4088:17;;;;;;;;;;;4081:24;;;4127:4;4120:11;;;;;;;;2899:1286;4169:5;4162:12;;;2674:1517;;;;;:::o;718:413:104:-;778:4;981:12;1090:7;1078:20;1070:28;;1123:1;1116:4;:8;1109:15;;;718:413;;;:::o;3573:194::-;3676:12;3707:53;3730:6;3738:4;3744:1;3747:12;3707:22;:53::i;:::-;3700:60;;3573:194;;;;;:::o;16639:93:92:-;;;;:::o;4920:958:104:-;5050:12;5082:18;5093:6;5082:10;:18::i;:::-;5074:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5205:12;5219:23;5246:6;:11;;5266:8;5277:4;5246:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5204:78;;;;5296:7;5292:580;;;5326:10;5319:17;;;;;;5292:580;5457:1;5437:10;:17;:21;5433:429;;;5695:10;5689:17;5755:15;5742:10;5738:2;5734:19;5727:44;5644:145;5834:12;5827:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4920:958;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "baseURI",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MINTER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PAUSER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "baseURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getRoleMember",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleMemberCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenOfOwnerByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "ast": {
    "absolutePath": "contracts/presets/ERC721PresetMinterPauserAutoId.sol",
    "exportedSymbols": {
      "ERC721PresetMinterPauserAutoId": [
        7292
      ]
    },
    "id": 7293,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 7141,
        "literals": [
          "solidity",
          "^",
          "0.7",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:23:75"
      },
      {
        "absolutePath": "contracts/access/AccessControl.sol",
        "file": "../access/AccessControl.sol",
        "id": 7142,
        "nodeType": "ImportDirective",
        "scope": 7293,
        "sourceUnit": 1468,
        "src": "58:37:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/GSN/Context.sol",
        "file": "../GSN/Context.sol",
        "id": 7143,
        "nodeType": "ImportDirective",
        "scope": 7293,
        "sourceUnit": 23,
        "src": "96:28:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/utils/Counters.sol",
        "file": "../utils/Counters.sol",
        "id": 7144,
        "nodeType": "ImportDirective",
        "scope": 7293,
        "sourceUnit": 12947,
        "src": "125:31:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/token/ERC721/ERC721.sol",
        "file": "../token/ERC721/ERC721.sol",
        "id": 7145,
        "nodeType": "ImportDirective",
        "scope": 7293,
        "sourceUnit": 11032,
        "src": "157:36:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/token/ERC721/ERC721Burnable.sol",
        "file": "../token/ERC721/ERC721Burnable.sol",
        "id": 7146,
        "nodeType": "ImportDirective",
        "scope": 7293,
        "sourceUnit": 11062,
        "src": "194:44:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/token/ERC721/ERC721Pausable.sol",
        "file": "../token/ERC721/ERC721Pausable.sol",
        "id": 7147,
        "nodeType": "ImportDirective",
        "scope": 7293,
        "sourceUnit": 11126,
        "src": "239:44:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7149,
              "name": "Context",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22,
              "src": "934:7:75",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Context_$22",
                "typeString": "contract Context"
              }
            },
            "id": 7150,
            "nodeType": "InheritanceSpecifier",
            "src": "934:7:75"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7151,
              "name": "AccessControl",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1467,
              "src": "943:13:75",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AccessControl_$1467",
                "typeString": "contract AccessControl"
              }
            },
            "id": 7152,
            "nodeType": "InheritanceSpecifier",
            "src": "943:13:75"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7153,
              "name": "ERC721Burnable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11061,
              "src": "958:14:75",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC721Burnable_$11061",
                "typeString": "contract ERC721Burnable"
              }
            },
            "id": 7154,
            "nodeType": "InheritanceSpecifier",
            "src": "958:14:75"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7155,
              "name": "ERC721Pausable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11125,
              "src": "974:14:75",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC721Pausable_$11125",
                "typeString": "contract ERC721Pausable"
              }
            },
            "id": 7156,
            "nodeType": "InheritanceSpecifier",
            "src": "974:14:75"
          }
        ],
        "contractDependencies": [
          22,
          1467,
          1802,
          2048,
          11031,
          11061,
          11125,
          11241,
          11272,
          11299,
          13994
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 7148,
          "nodeType": "StructuredDocumentation",
          "src": "285:605:75",
          "text": " @dev {ERC721} token, including:\n  - ability for holders to burn (destroy) their tokens\n  - a minter role that allows for token minting (creation)\n  - a pauser role that allows to stop all token transfers\n  - token ID and URI autogeneration\n This contract uses {AccessControl} to lock permissioned functions using the\n different roles - head to its documentation for details.\n The account that deploys the contract will be granted the minter and pauser\n roles, as well as the default admin role, which will let it grant both minter\n and pauser roles to other accounts."
        },
        "fullyImplemented": true,
        "id": 7292,
        "linearizedBaseContracts": [
          7292,
          11125,
          13994,
          11061,
          11031,
          11272,
          11299,
          11241,
          1802,
          2048,
          1467,
          22
        ],
        "name": "ERC721PresetMinterPauserAutoId",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 7159,
            "libraryName": {
              "contractScope": null,
              "id": 7157,
              "name": "Counters",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 12946,
              "src": "1001:8:75",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Counters_$12946",
                "typeString": "library Counters"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "995:36:75",
            "typeName": {
              "contractScope": null,
              "id": 7158,
              "name": "Counters.Counter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 12906,
              "src": "1014:16:75",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Counter_$12906_storage_ptr",
                "typeString": "struct Counters.Counter"
              }
            }
          },
          {
            "constant": true,
            "functionSelector": "d5391393",
            "id": 7164,
            "mutability": "constant",
            "name": "MINTER_ROLE",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7292,
            "src": "1037:62:75",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 7160,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1037:7:75",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4d494e5445525f524f4c45",
                  "id": 7162,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1085:13:75",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6",
                    "typeString": "literal_string \"MINTER_ROLE\""
                  },
                  "value": "MINTER_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6",
                    "typeString": "literal_string \"MINTER_ROLE\""
                  }
                ],
                "id": 7161,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": -8,
                "src": "1075:9:75",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 7163,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1075:24:75",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "functionSelector": "e63ab1e9",
            "id": 7169,
            "mutability": "constant",
            "name": "PAUSER_ROLE",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7292,
            "src": "1105:62:75",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 7165,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1105:7:75",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "5041555345525f524f4c45",
                  "id": 7167,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1153:13:75",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a",
                    "typeString": "literal_string \"PAUSER_ROLE\""
                  },
                  "value": "PAUSER_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a",
                    "typeString": "literal_string \"PAUSER_ROLE\""
                  }
                ],
                "id": 7166,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": -8,
                "src": "1143:9:75",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 7168,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1143:24:75",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7171,
            "mutability": "mutable",
            "name": "_tokenIdTracker",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7292,
            "src": "1174:40:75",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Counter_$12906_storage",
              "typeString": "struct Counters.Counter"
            },
            "typeName": {
              "contractScope": null,
              "id": 7170,
              "name": "Counters.Counter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 12906,
              "src": "1174:16:75",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Counter_$12906_storage_ptr",
                "typeString": "struct Counters.Counter"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 7207,
              "nodeType": "Block",
              "src": "1574:187:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7186,
                        "name": "DEFAULT_ADMIN_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1210,
                        "src": "1595:18:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 7187,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10,
                          "src": "1615:10:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                            "typeString": "function () view returns (address payable)"
                          }
                        },
                        "id": 7188,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1615:12:75",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 7185,
                      "name": "_setupRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1393,
                      "src": "1584:10:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 7189,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1584:44:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7190,
                  "nodeType": "ExpressionStatement",
                  "src": "1584:44:75"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7192,
                        "name": "MINTER_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7164,
                        "src": "1650:11:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 7193,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10,
                          "src": "1663:10:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                            "typeString": "function () view returns (address payable)"
                          }
                        },
                        "id": 7194,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1663:12:75",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 7191,
                      "name": "_setupRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1393,
                      "src": "1639:10:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 7195,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1639:37:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7196,
                  "nodeType": "ExpressionStatement",
                  "src": "1639:37:75"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7198,
                        "name": "PAUSER_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7169,
                        "src": "1697:11:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 7199,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10,
                          "src": "1710:10:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                            "typeString": "function () view returns (address payable)"
                          }
                        },
                        "id": 7200,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1710:12:75",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 7197,
                      "name": "_setupRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1393,
                      "src": "1686:10:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 7201,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1686:37:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7202,
                  "nodeType": "ExpressionStatement",
                  "src": "1686:37:75"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7204,
                        "name": "baseURI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7178,
                        "src": "1746:7:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 7203,
                      "name": "_setBaseURI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10939,
                      "src": "1734:11:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory)"
                      }
                    },
                    "id": 7205,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1734:20:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7206,
                  "nodeType": "ExpressionStatement",
                  "src": "1734:20:75"
                }
              ]
            },
            "documentation": {
              "id": 7172,
              "nodeType": "StructuredDocumentation",
              "src": "1221:250:75",
              "text": " @dev Grants `DEFAULT_ADMIN_ROLE`, `MINTER_ROLE` and `PAUSER_ROLE` to the\n account that deploys the contract.\n Token URIs will be autogenerated based on `baseURI` and their token IDs.\n See {ERC721-tokenURI}."
            },
            "id": 7208,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7181,
                    "name": "name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7174,
                    "src": "1560:4:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 7182,
                    "name": "symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7176,
                    "src": "1566:6:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  }
                ],
                "id": 7183,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7180,
                  "name": "ERC721",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 11031,
                  "src": "1553:6:75",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_ERC721_$11031_$",
                    "typeString": "type(contract ERC721)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1553:20:75"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7179,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7174,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7208,
                  "src": "1488:18:75",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 7173,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1488:6:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7176,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7208,
                  "src": "1508:20:75",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 7175,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1508:6:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7178,
                  "mutability": "mutable",
                  "name": "baseURI",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7208,
                  "src": "1530:21:75",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 7177,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1530:6:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1487:65:75"
            },
            "returnParameters": {
              "id": 7184,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1574:0:75"
            },
            "scope": 7292,
            "src": "1476:285:75",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7235,
              "nodeType": "Block",
              "src": "2177:356:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7216,
                            "name": "MINTER_ROLE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7164,
                            "src": "2203:11:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 7217,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10,
                              "src": "2216:10:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                "typeString": "function () view returns (address payable)"
                              }
                            },
                            "id": 7218,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2216:12:75",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "id": 7215,
                          "name": "hasRole",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1256,
                          "src": "2195:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (bytes32,address) view returns (bool)"
                          }
                        },
                        "id": 7219,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2195:34:75",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552433732315072657365744d696e7465725061757365724175746f49643a206d7573742068617665206d696e74657220726f6c6520746f206d696e74",
                        "id": 7220,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2231:63:75",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ea198f3e8a5129d820e5e0bb8ade0f42a56b75e06362ce80ffa86409143aedbb",
                          "typeString": "literal_string \"ERC721PresetMinterPauserAutoId: must have minter role to mint\""
                        },
                        "value": "ERC721PresetMinterPauserAutoId: must have minter role to mint"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ea198f3e8a5129d820e5e0bb8ade0f42a56b75e06362ce80ffa86409143aedbb",
                          "typeString": "literal_string \"ERC721PresetMinterPauserAutoId: must have minter role to mint\""
                        }
                      ],
                      "id": 7214,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2187:7:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7221,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2187:108:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7222,
                  "nodeType": "ExpressionStatement",
                  "src": "2187:108:75"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7224,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7211,
                        "src": "2459:2:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 7225,
                            "name": "_tokenIdTracker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7171,
                            "src": "2463:15:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Counter_$12906_storage",
                              "typeString": "struct Counters.Counter storage ref"
                            }
                          },
                          "id": 7226,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "current",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12917,
                          "src": "2463:23:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$12906_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$12906_storage_ptr_$",
                            "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                          }
                        },
                        "id": 7227,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2463:25:75",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7223,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10767,
                      "src": "2453:5:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2453:36:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7229,
                  "nodeType": "ExpressionStatement",
                  "src": "2453:36:75"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7230,
                        "name": "_tokenIdTracker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7171,
                        "src": "2499:15:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Counter_$12906_storage",
                          "typeString": "struct Counters.Counter storage ref"
                        }
                      },
                      "id": 7232,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "increment",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12929,
                      "src": "2499:25:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Counter_$12906_storage_ptr_$returns$__$bound_to$_t_struct$_Counter_$12906_storage_ptr_$",
                        "typeString": "function (struct Counters.Counter storage pointer)"
                      }
                    },
                    "id": 7233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2499:27:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7234,
                  "nodeType": "ExpressionStatement",
                  "src": "2499:27:75"
                }
              ]
            },
            "documentation": {
              "id": 7209,
              "nodeType": "StructuredDocumentation",
              "src": "1767:364:75",
              "text": " @dev Creates a new token for `to`. Its token ID will be automatically\n assigned (and available on the emitted {IERC721-Transfer} event), and the token\n URI autogenerated based on the base URI passed at construction.\n See {ERC721-_mint}.\n Requirements:\n - the caller must have the `MINTER_ROLE`."
            },
            "functionSelector": "6a627842",
            "id": 7236,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7212,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7211,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7236,
                  "src": "2150:10:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7210,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2150:7:75",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2149:12:75"
            },
            "returnParameters": {
              "id": 7213,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2177:0:75"
            },
            "scope": 7292,
            "src": "2136:397:75",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7252,
              "nodeType": "Block",
              "src": "2769:144:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7242,
                            "name": "PAUSER_ROLE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7169,
                            "src": "2795:11:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 7243,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10,
                              "src": "2808:10:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                "typeString": "function () view returns (address payable)"
                              }
                            },
                            "id": 7244,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2808:12:75",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "id": 7241,
                          "name": "hasRole",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1256,
                          "src": "2787:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (bytes32,address) view returns (bool)"
                          }
                        },
                        "id": 7245,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2787:34:75",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552433732315072657365744d696e7465725061757365724175746f49643a206d75737420686176652070617573657220726f6c6520746f207061757365",
                        "id": 7246,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2823:64:75",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_40c9c95e9f416c51c55d88e1508883bb887c746928503de15b750cf10a750aef",
                          "typeString": "literal_string \"ERC721PresetMinterPauserAutoId: must have pauser role to pause\""
                        },
                        "value": "ERC721PresetMinterPauserAutoId: must have pauser role to pause"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_40c9c95e9f416c51c55d88e1508883bb887c746928503de15b750cf10a750aef",
                          "typeString": "literal_string \"ERC721PresetMinterPauserAutoId: must have pauser role to pause\""
                        }
                      ],
                      "id": 7240,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2779:7:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7247,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2779:109:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7248,
                  "nodeType": "ExpressionStatement",
                  "src": "2779:109:75"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 7249,
                      "name": "_pause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13977,
                      "src": "2898:6:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 7250,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2898:8:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7251,
                  "nodeType": "ExpressionStatement",
                  "src": "2898:8:75"
                }
              ]
            },
            "documentation": {
              "id": 7237,
              "nodeType": "StructuredDocumentation",
              "src": "2539:193:75",
              "text": " @dev Pauses all token transfers.\n See {ERC721Pausable} and {Pausable-_pause}.\n Requirements:\n - the caller must have the `PAUSER_ROLE`."
            },
            "functionSelector": "8456cb59",
            "id": 7253,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "pause",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7238,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2751:2:75"
            },
            "returnParameters": {
              "id": 7239,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2769:0:75"
            },
            "scope": 7292,
            "src": "2737:176:75",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7269,
              "nodeType": "Block",
              "src": "3155:148:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7259,
                            "name": "PAUSER_ROLE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7169,
                            "src": "3181:11:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 7260,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10,
                              "src": "3194:10:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                "typeString": "function () view returns (address payable)"
                              }
                            },
                            "id": 7261,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3194:12:75",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "id": 7258,
                          "name": "hasRole",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1256,
                          "src": "3173:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (bytes32,address) view returns (bool)"
                          }
                        },
                        "id": 7262,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3173:34:75",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552433732315072657365744d696e7465725061757365724175746f49643a206d75737420686176652070617573657220726f6c6520746f20756e7061757365",
                        "id": 7263,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3209:66:75",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f3877585dfb2235e1900eee5d9e32a457b9d6148f93823a62cb07ae76c6585a8",
                          "typeString": "literal_string \"ERC721PresetMinterPauserAutoId: must have pauser role to unpause\""
                        },
                        "value": "ERC721PresetMinterPauserAutoId: must have pauser role to unpause"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f3877585dfb2235e1900eee5d9e32a457b9d6148f93823a62cb07ae76c6585a8",
                          "typeString": "literal_string \"ERC721PresetMinterPauserAutoId: must have pauser role to unpause\""
                        }
                      ],
                      "id": 7257,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3165:7:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7264,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3165:111:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7265,
                  "nodeType": "ExpressionStatement",
                  "src": "3165:111:75"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 7266,
                      "name": "_unpause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13993,
                      "src": "3286:8:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 7267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3286:10:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7268,
                  "nodeType": "ExpressionStatement",
                  "src": "3286:10:75"
                }
              ]
            },
            "documentation": {
              "id": 7254,
              "nodeType": "StructuredDocumentation",
              "src": "2919:197:75",
              "text": " @dev Unpauses all token transfers.\n See {ERC721Pausable} and {Pausable-_unpause}.\n Requirements:\n - the caller must have the `PAUSER_ROLE`."
            },
            "functionSelector": "3f4ba83a",
            "id": 7270,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "unpause",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7255,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3137:2:75"
            },
            "returnParameters": {
              "id": 7256,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3155:0:75"
            },
            "scope": 7292,
            "src": "3121:182:75",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              11030,
              11124
            ],
            "body": {
              "id": 7290,
              "nodeType": "Block",
              "src": "3432:62:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7285,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7272,
                        "src": "3469:4:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7286,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7274,
                        "src": "3475:2:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7287,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7276,
                        "src": "3479:7:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7282,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "3442:5:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_ERC721PresetMinterPauserAutoId_$7292",
                          "typeString": "contract super ERC721PresetMinterPauserAutoId"
                        }
                      },
                      "id": 7284,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_beforeTokenTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11124,
                      "src": "3442:26:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 7288,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3442:45:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7289,
                  "nodeType": "ExpressionStatement",
                  "src": "3442:45:75"
                }
              ]
            },
            "documentation": null,
            "id": 7291,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_beforeTokenTransfer",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7280,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "contractScope": null,
                  "id": 7278,
                  "name": "ERC721",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 11031,
                  "src": "3408:6:75",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC721_$11031",
                    "typeString": "contract ERC721"
                  }
                },
                {
                  "contractScope": null,
                  "id": 7279,
                  "name": "ERC721Pausable",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 11125,
                  "src": "3416:14:75",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC721Pausable_$11125",
                    "typeString": "contract ERC721Pausable"
                  }
                }
              ],
              "src": "3399:32:75"
            },
            "parameters": {
              "id": 7277,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7272,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7291,
                  "src": "3339:12:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7271,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3339:7:75",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7274,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7291,
                  "src": "3353:10:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7273,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3353:7:75",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7276,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7291,
                  "src": "3365:15:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7275,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3365:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3338:43:75"
            },
            "returnParameters": {
              "id": 7281,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3432:0:75"
            },
            "scope": 7292,
            "src": "3309:185:75",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          }
        ],
        "scope": 7293,
        "src": "891:2605:75"
      }
    ],
    "src": "33:3464:75"
  },
  "bytecode": "0x60806040523480156200001157600080fd5b50604051620041de380380620041de833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620001d257600080fd5b83820191506020820185811115620001e957600080fd5b82518660018202830111640100000000821117156200020757600080fd5b8083526020830192505050908051906020019080838360005b838110156200023d57808201518184015260208101905062000220565b50505050905090810190601f1680156200026b5780820380516001836020036101000a031916815260200191505b5060405250505082826200028c6301ffc9a760e01b620003e360201b60201c565b8160079080519060200190620002a49291906200069e565b508060089080519060200190620002bd9291906200069e565b50620002d66380ac58cd60e01b620003e360201b60201c565b620002ee635b5e139f60e01b620003e360201b60201c565b6200030663780e9d6360e01b620003e360201b60201c565b50506000600b60006101000a81548160ff021916908315150217905550620003476000801b6200033b620004ec60201b60201c565b620004f460201b60201c565b620003887f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66200037c620004ec60201b60201c565b620004f460201b60201c565b620003c97f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a620003bd620004ec60201b60201c565b620004f460201b60201c565b620003da816200050a60201b60201c565b50505062000744565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141562000480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b6200050682826200052660201b60201c565b5050565b80600a9080519060200190620005229291906200069e565b5050565b6200055481600080858152602001908152602001600020600001620005c960201b62001d781790919060201c565b15620005c5576200056a620004ec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000620005f9836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6200060160201b60201c565b905092915050565b60006200061583836200067b60201b60201c565b6200067057826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905062000675565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006e157805160ff191683800117855562000712565b8280016001018555821562000712579182015b8281111562000711578251825591602001919060010190620006f4565b5b50905062000721919062000725565b5090565b5b808211156200074057600081600090555060010162000726565b5090565b613a8a80620007546000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80636a6278421161010f578063a22cb465116100a2578063d539139311610071578063d539139314610b7b578063d547741f14610b99578063e63ab1e914610be7578063e985e9c514610c05576101f0565b8063a22cb4651461093d578063b88d4fde1461098d578063c87b56dd14610a92578063ca15c87314610b39576101f0565b80639010d07c116100de5780639010d07c146107d657806391d148541461083857806395d89b411461089c578063a217fddf1461091f576101f0565b80636a627842146106ad5780636c0360eb146106f157806370a08231146107745780638456cb59146107cc576101f0565b80632f745c591161018757806342966c681161015657806342966c68146105c55780634f6ccce7146105f35780635c975abb146106355780636352211e14610655576101f0565b80632f745c591461049d57806336568abe146104ff5780633f4ba83a1461054d57806342842e0e14610557576101f0565b806318160ddd116101c357806318160ddd1461038157806323b872dd1461039f578063248a9ca31461040d5780632f2ff15d1461044f576101f0565b806301ffc9a7146101f557806306fdde0314610258578063081812fc146102db578063095ea7b314610333575b600080fd5b6102406004803603602081101561020b57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610c7f565b60405180821515815260200191505060405180910390f35b610260610ce7565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102a0578082015181840152602081019050610285565b50505050905090810190601f1680156102cd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610307600480360360208110156102f157600080fd5b8101908080359060200190929190505050610d89565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61037f6004803603604081101561034957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e24565b005b610389610f68565b6040518082815260200191505060405180910390f35b61040b600480360360608110156103b557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f79565b005b6104396004803603602081101561042357600080fd5b8101908080359060200190929190505050610fef565b6040518082815260200191505060405180910390f35b61049b6004803603604081101561046557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061100e565b005b6104e9600480360360408110156104b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611097565b6040518082815260200191505060405180910390f35b61054b6004803603604081101561051557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110f2565b005b61055561118b565b005b6105c36004803603606081101561056d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061121b565b005b6105f1600480360360208110156105db57600080fd5b810190808035906020019092919050505061123b565b005b61061f6004803603602081101561060957600080fd5b81019080803590602001909291905050506112ad565b6040518082815260200191505060405180910390f35b61063d6112d0565b60405180821515815260200191505060405180910390f35b6106816004803603602081101561066b57600080fd5b81019080803590602001909291905050506112e7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106ef600480360360208110156106c357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061131e565b005b6106f96113c4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561073957808201518184015260208101905061071e565b50505050905090810190601f1680156107665780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107b66004803603602081101561078a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611466565b6040518082815260200191505060405180910390f35b6107d461153b565b005b61080c600480360360408110156107ec57600080fd5b8101908080359060200190929190803590602001909291905050506115cb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108846004803603604081101561084e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115fc565b60405180821515815260200191505060405180910390f35b6108a461162d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108e45780820151818401526020810190506108c9565b50505050905090810190601f1680156109115780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109276116cf565b6040518082815260200191505060405180910390f35b61098b6004803603604081101561095357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506116d6565b005b610a90600480360360808110156109a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610a0a57600080fd5b820183602082011115610a1c57600080fd5b80359060200191846001830284011164010000000083111715610a3e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061188c565b005b610abe60048036036020811015610aa857600080fd5b8101908080359060200190929190505050611904565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610afe578082015181840152602081019050610ae3565b50505050905090810190601f168015610b2b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b6560048036036020811015610b4f57600080fd5b8101908080359060200190929190505050611bed565b6040518082815260200191505060405180910390f35b610b83611c13565b6040518082815260200191505060405180910390f35b610be560048036036040811015610baf57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c37565b005b610bef611cc0565b6040518082815260200191505060405180910390f35b610c6760048036036040811015610c1b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ce4565b60405180821515815260200191505060405180910390f35b600060016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060078054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d7f5780601f10610d5457610100808354040283529160200191610d7f565b820191906000526020600020905b815481529060010190602001808311610d6257829003601f168201915b5050505050905090565b6000610d9482611da8565b610de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806138a3602c913960400191505060405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e2f826112e7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610eb6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806139276021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ed5611dc5565b73ffffffffffffffffffffffffffffffffffffffff161480610f045750610f0381610efe611dc5565b611ce4565b5b610f59576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806137f66038913960400191505060405180910390fd5b610f638383611dcd565b505050565b6000610f746003611e86565b905090565b610f8a610f84611dc5565b82611e9b565b610fdf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806139486031913960400191505060405180910390fd5b610fea838383611f8f565b505050565b6000806000838152602001908152602001600020600201549050919050565b6110346000808481526020019081526020016000206002015461102f611dc5565b6115fc565b611089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806136d7602f913960400191505060405180910390fd5b61109382826121d2565b5050565b60006110ea82600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061226590919063ffffffff16565b905092915050565b6110fa611dc5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461117d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613a26602f913960400191505060405180910390fd5b611187828261227f565b5050565b6111bc7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111b7611dc5565b6115fc565b611211576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806139e66040913960400191505060405180910390fd5b611219612312565b565b6112368383836040518060200160405280600081525061188c565b505050565b61124c611246611dc5565b82611e9b565b6112a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806139b66030913960400191505060405180910390fd5b6112aa81612405565b50565b6000806112c483600361253f90919063ffffffff16565b50905080915050919050565b6000600b60009054906101000a900460ff16905090565b60006113178260405180606001604052806029815260200161385860299139600361256b9092919063ffffffff16565b9050919050565b61134f7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661134a611dc5565b6115fc565b6113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180613979603d913960400191505060405180910390fd5b6113b7816113b2600c61258a565b612598565b6113c1600c61278c565b50565b6060600a8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561145c5780601f106114315761010080835404028352916020019161145c565b820191906000526020600020905b81548152906001019060200180831161143f57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061382e602a913960400191505060405180910390fd5b611534600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206127a2565b9050919050565b61156c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611567611dc5565b6115fc565b6115c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180613738603e913960400191505060405180910390fd5b6115c96127b7565b565b60006115f4826000808681526020019081526020016000206000016128ab90919063ffffffff16565b905092915050565b6000611625826000808681526020019081526020016000206000016128c590919063ffffffff16565b905092915050565b606060088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116c55780601f1061169a576101008083540402835291602001916116c5565b820191906000526020600020905b8154815290600101906020018083116116a857829003601f168201915b5050505050905090565b6000801b81565b6116de611dc5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561177f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b806006600061178c611dc5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611839611dc5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b61189d611897611dc5565b83611e9b565b6118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806139486031913960400191505060405180910390fd5b6118fe848484846128f5565b50505050565b606061190f82611da8565b611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806138f8602f913960400191505060405180910390fd5b6060600960008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a0d5780601f106119e257610100808354040283529160200191611a0d565b820191906000526020600020905b8154815290600101906020018083116119f057829003601f168201915b505050505090506000600a8054600181600116156101000203166002900490501415611a3c5780915050611be8565b600081511115611b1557600a816040516020018083805460018160011615610100020316600290048015611aa75780601f10611a85576101008083540402835291820191611aa7565b820191906000526020600020905b815481529060010190602001808311611a93575b505082805190602001908083835b60208310611ad85780518252602082019150602081019050602083039250611ab5565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050611be8565b600a611b2084612967565b6040516020018083805460018160011615610100020316600290048015611b7e5780601f10611b5c576101008083540402835291820191611b7e565b820191906000526020600020905b815481529060010190602001808311611b6a575b505082805190602001908083835b60208310611baf5780518252602082019150602081019050602083039250611b8c565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529150505b919050565b6000611c0c600080848152602001908152602001600020600001612aae565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b611c5d60008084815260200190815260200160002060020154611c58611dc5565b6115fc565b611cb2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806137c66030913960400191505060405180910390fd5b611cbc828261227f565b5050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000611da0836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612ac3565b905092915050565b6000611dbe826003612b3390919063ffffffff16565b9050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e40836112e7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e9482600001612b4d565b9050919050565b6000611ea682611da8565b611efb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061379a602c913960400191505060405180910390fd5b6000611f06836112e7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f7557508373ffffffffffffffffffffffffffffffffffffffff16611f5d84610d89565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f865750611f858185611ce4565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611faf826112e7565b73ffffffffffffffffffffffffffffffffffffffff161461201b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806138cf6029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806137766024913960400191505060405180910390fd5b6120ac838383612b5e565b6120b7600082611dcd565b61210881600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612b6e90919063ffffffff16565b5061215a81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612b8890919063ffffffff16565b5061217181836003612ba29092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6121f981600080858152602001908152602001600020600001611d7890919063ffffffff16565b1561226157612206611dc5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006122748360000183612bd7565b60001c905092915050565b6122a681600080858152602001908152602001600020600001612c5a90919063ffffffff16565b1561230e576122b3611dc5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600b60009054906101000a900460ff16612394576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6123d8611dc5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000612410826112e7565b905061241e81600084612b5e565b612429600083611dcd565b60006009600084815260200190815260200160002080546001816001161561010002031660029004905014612478576009600083815260200190815260200160002060006124779190613624565b5b6124c982600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612b6e90919063ffffffff16565b506124de826003612c8a90919063ffffffff16565b5081600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000806000806125528660000186612ca4565b915091508160001c8160001c9350935050509250929050565b600061257e846000018460001b84612d3d565b60001c90509392505050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561263b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b61264481611da8565b156126b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b6126c360008383612b5e565b61271481600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612b8890919063ffffffff16565b5061272b81836003612ba29092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6001816000016000828254019250508190555050565b60006127b082600001612e33565b9050919050565b600b60009054906101000a900460ff161561283a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861287e611dc5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b60006128ba8360000183612bd7565b60001c905092915050565b60006128ed836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612e44565b905092915050565b612900848484611f8f565b61290c84848484612e67565b612961576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806137066032913960400191505060405180910390fd5b50505050565b606060008214156129af576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612aa9565b600082905060005b600082146129d9578080600101915050600a82816129d157fe5b0491506129b7565b60608167ffffffffffffffff811180156129f257600080fd5b506040519080825280601f01601f191660200182016040528015612a255781602001600182028036833780820191505090505b50905060006001830390508593505b60008414612aa157600a8481612a4657fe5b0660300160f81b82828060019003935081518110612a6057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8481612a9957fe5b049350612a34565b819450505050505b919050565b6000612abc82600001612e33565b9050919050565b6000612acf8383612e44565b612b28578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612b2d565b600090505b92915050565b6000612b45836000018360001b613080565b905092915050565b600081600001805490509050919050565b612b698383836130a3565b505050565b6000612b80836000018360001b613111565b905092915050565b6000612b9a836000018360001b612ac3565b905092915050565b6000612bce846000018460001b8473ffffffffffffffffffffffffffffffffffffffff1660001b6131f9565b90509392505050565b600081836000018054905011612c38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061368a6022913960400191505060405180910390fd5b826000018281548110612c4757fe5b9060005260206000200154905092915050565b6000612c82836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613111565b905092915050565b6000612c9c836000018360001b6132d5565b905092915050565b60008082846000018054905011612d06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806138816022913960400191505060405180910390fd5b6000846000018481548110612d1757fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008084600101600085815260200190815260200160002054905060008114158390612e04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612dc9578082015181840152602081019050612dae565b50505050905090810190601f168015612df65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50846000016001820381548110612e1757fe5b9060005260206000209060020201600101549150509392505050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b6000612e888473ffffffffffffffffffffffffffffffffffffffff166133ee565b612e955760019050613078565b6060612fff63150b7a0260e01b612eaa611dc5565b888787604051602401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612f2e578082015181840152602081019050612f13565b50505050905090810190601f168015612f5b5780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051806060016040528060328152602001613706603291398773ffffffffffffffffffffffffffffffffffffffff166134019092919063ffffffff16565b9050600081806020019051602081101561301857600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614925050505b949350505050565b600080836001016000848152602001908152602001600020541415905092915050565b6130ae838383613419565b6130b66112d0565b1561310c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806136ac602b913960400191505060405180910390fd5b505050565b600080836001016000848152602001908152602001600020549050600081146131ed576000600182039050600060018660000180549050039050600086600001828154811061315c57fe5b906000526020600020015490508087600001848154811061317957fe5b90600052602060002001819055506001830187600101600083815260200190815260200160002081905550866000018054806131b157fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506131f3565b60009150505b92915050565b60008084600101600085815260200190815260200160002054905060008114156132a0578460000160405180604001604052808681526020018581525090806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010155505084600001805490508560010160008681526020019081526020016000208190555060019150506132ce565b828560000160018303815481106132b357fe5b90600052602060002090600202016001018190555060009150505b9392505050565b600080836001016000848152602001908152602001600020549050600081146133e2576000600182039050600060018660000180549050039050600086600001828154811061332057fe5b906000526020600020906002020190508087600001848154811061334057fe5b906000526020600020906002020160008201548160000155600182015481600101559050506001830187600101600083600001548152602001908152602001600020819055508660000180548061339357fe5b60019003818190600052602060002090600202016000808201600090556001820160009055505090558660010160008781526020019081526020016000206000905560019450505050506133e8565b60009150505b92915050565b600080823b905060008111915050919050565b6060613410848460008561341e565b90509392505050565b505050565b6060613429856133ee565b61349b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106134eb57805182526020820191506020810190506020830392506134c8565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461354d576040519150601f19603f3d011682016040523d82523d6000602084013e613552565b606091505b5091509150811561356757809250505061361c565b60008151111561357a5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135e15780820151818401526020810190506135c6565b50505050905090810190601f16801561360e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b50805460018160011615610100020316600290046000825580601f1061364a5750613669565b601f016020900490600052602060002090810190613668919061366c565b5b50565b5b8082111561368557600081600090555060010161366d565b509056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732315061757361626c653a20746f6b656e207472616e73666572207768696c6520706175736564416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e744552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732315072657365744d696e7465725061757365724175746f49643a206d75737420686176652070617573657220726f6c6520746f2070617573654552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b654552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644552433732315072657365744d696e7465725061757365724175746f49643a206d7573742068617665206d696e74657220726f6c6520746f206d696e744552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644552433732315072657365744d696e7465725061757365724175746f49643a206d75737420686176652070617573657220726f6c6520746f20756e7061757365416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a264697066735822122012f0da61b8d8bf0c2d2711189f4f9710c927ca7040d7875c8dd265e053a542fd64736f6c63430007000033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80636a6278421161010f578063a22cb465116100a2578063d539139311610071578063d539139314610b7b578063d547741f14610b99578063e63ab1e914610be7578063e985e9c514610c05576101f0565b8063a22cb4651461093d578063b88d4fde1461098d578063c87b56dd14610a92578063ca15c87314610b39576101f0565b80639010d07c116100de5780639010d07c146107d657806391d148541461083857806395d89b411461089c578063a217fddf1461091f576101f0565b80636a627842146106ad5780636c0360eb146106f157806370a08231146107745780638456cb59146107cc576101f0565b80632f745c591161018757806342966c681161015657806342966c68146105c55780634f6ccce7146105f35780635c975abb146106355780636352211e14610655576101f0565b80632f745c591461049d57806336568abe146104ff5780633f4ba83a1461054d57806342842e0e14610557576101f0565b806318160ddd116101c357806318160ddd1461038157806323b872dd1461039f578063248a9ca31461040d5780632f2ff15d1461044f576101f0565b806301ffc9a7146101f557806306fdde0314610258578063081812fc146102db578063095ea7b314610333575b600080fd5b6102406004803603602081101561020b57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610c7f565b60405180821515815260200191505060405180910390f35b610260610ce7565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102a0578082015181840152602081019050610285565b50505050905090810190601f1680156102cd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610307600480360360208110156102f157600080fd5b8101908080359060200190929190505050610d89565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61037f6004803603604081101561034957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e24565b005b610389610f68565b6040518082815260200191505060405180910390f35b61040b600480360360608110156103b557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f79565b005b6104396004803603602081101561042357600080fd5b8101908080359060200190929190505050610fef565b6040518082815260200191505060405180910390f35b61049b6004803603604081101561046557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061100e565b005b6104e9600480360360408110156104b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611097565b6040518082815260200191505060405180910390f35b61054b6004803603604081101561051557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110f2565b005b61055561118b565b005b6105c36004803603606081101561056d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061121b565b005b6105f1600480360360208110156105db57600080fd5b810190808035906020019092919050505061123b565b005b61061f6004803603602081101561060957600080fd5b81019080803590602001909291905050506112ad565b6040518082815260200191505060405180910390f35b61063d6112d0565b60405180821515815260200191505060405180910390f35b6106816004803603602081101561066b57600080fd5b81019080803590602001909291905050506112e7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106ef600480360360208110156106c357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061131e565b005b6106f96113c4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561073957808201518184015260208101905061071e565b50505050905090810190601f1680156107665780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107b66004803603602081101561078a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611466565b6040518082815260200191505060405180910390f35b6107d461153b565b005b61080c600480360360408110156107ec57600080fd5b8101908080359060200190929190803590602001909291905050506115cb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108846004803603604081101561084e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115fc565b60405180821515815260200191505060405180910390f35b6108a461162d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108e45780820151818401526020810190506108c9565b50505050905090810190601f1680156109115780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109276116cf565b6040518082815260200191505060405180910390f35b61098b6004803603604081101561095357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506116d6565b005b610a90600480360360808110156109a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610a0a57600080fd5b820183602082011115610a1c57600080fd5b80359060200191846001830284011164010000000083111715610a3e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061188c565b005b610abe60048036036020811015610aa857600080fd5b8101908080359060200190929190505050611904565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610afe578082015181840152602081019050610ae3565b50505050905090810190601f168015610b2b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b6560048036036020811015610b4f57600080fd5b8101908080359060200190929190505050611bed565b6040518082815260200191505060405180910390f35b610b83611c13565b6040518082815260200191505060405180910390f35b610be560048036036040811015610baf57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c37565b005b610bef611cc0565b6040518082815260200191505060405180910390f35b610c6760048036036040811015610c1b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ce4565b60405180821515815260200191505060405180910390f35b600060016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060078054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d7f5780601f10610d5457610100808354040283529160200191610d7f565b820191906000526020600020905b815481529060010190602001808311610d6257829003601f168201915b5050505050905090565b6000610d9482611da8565b610de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806138a3602c913960400191505060405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e2f826112e7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610eb6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806139276021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ed5611dc5565b73ffffffffffffffffffffffffffffffffffffffff161480610f045750610f0381610efe611dc5565b611ce4565b5b610f59576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806137f66038913960400191505060405180910390fd5b610f638383611dcd565b505050565b6000610f746003611e86565b905090565b610f8a610f84611dc5565b82611e9b565b610fdf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806139486031913960400191505060405180910390fd5b610fea838383611f8f565b505050565b6000806000838152602001908152602001600020600201549050919050565b6110346000808481526020019081526020016000206002015461102f611dc5565b6115fc565b611089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806136d7602f913960400191505060405180910390fd5b61109382826121d2565b5050565b60006110ea82600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061226590919063ffffffff16565b905092915050565b6110fa611dc5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461117d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613a26602f913960400191505060405180910390fd5b611187828261227f565b5050565b6111bc7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111b7611dc5565b6115fc565b611211576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806139e66040913960400191505060405180910390fd5b611219612312565b565b6112368383836040518060200160405280600081525061188c565b505050565b61124c611246611dc5565b82611e9b565b6112a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806139b66030913960400191505060405180910390fd5b6112aa81612405565b50565b6000806112c483600361253f90919063ffffffff16565b50905080915050919050565b6000600b60009054906101000a900460ff16905090565b60006113178260405180606001604052806029815260200161385860299139600361256b9092919063ffffffff16565b9050919050565b61134f7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661134a611dc5565b6115fc565b6113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180613979603d913960400191505060405180910390fd5b6113b7816113b2600c61258a565b612598565b6113c1600c61278c565b50565b6060600a8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561145c5780601f106114315761010080835404028352916020019161145c565b820191906000526020600020905b81548152906001019060200180831161143f57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061382e602a913960400191505060405180910390fd5b611534600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206127a2565b9050919050565b61156c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611567611dc5565b6115fc565b6115c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180613738603e913960400191505060405180910390fd5b6115c96127b7565b565b60006115f4826000808681526020019081526020016000206000016128ab90919063ffffffff16565b905092915050565b6000611625826000808681526020019081526020016000206000016128c590919063ffffffff16565b905092915050565b606060088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116c55780601f1061169a576101008083540402835291602001916116c5565b820191906000526020600020905b8154815290600101906020018083116116a857829003601f168201915b5050505050905090565b6000801b81565b6116de611dc5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561177f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b806006600061178c611dc5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611839611dc5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b61189d611897611dc5565b83611e9b565b6118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806139486031913960400191505060405180910390fd5b6118fe848484846128f5565b50505050565b606061190f82611da8565b611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806138f8602f913960400191505060405180910390fd5b6060600960008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a0d5780601f106119e257610100808354040283529160200191611a0d565b820191906000526020600020905b8154815290600101906020018083116119f057829003601f168201915b505050505090506000600a8054600181600116156101000203166002900490501415611a3c5780915050611be8565b600081511115611b1557600a816040516020018083805460018160011615610100020316600290048015611aa75780601f10611a85576101008083540402835291820191611aa7565b820191906000526020600020905b815481529060010190602001808311611a93575b505082805190602001908083835b60208310611ad85780518252602082019150602081019050602083039250611ab5565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050611be8565b600a611b2084612967565b6040516020018083805460018160011615610100020316600290048015611b7e5780601f10611b5c576101008083540402835291820191611b7e565b820191906000526020600020905b815481529060010190602001808311611b6a575b505082805190602001908083835b60208310611baf5780518252602082019150602081019050602083039250611b8c565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529150505b919050565b6000611c0c600080848152602001908152602001600020600001612aae565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b611c5d60008084815260200190815260200160002060020154611c58611dc5565b6115fc565b611cb2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806137c66030913960400191505060405180910390fd5b611cbc828261227f565b5050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000611da0836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612ac3565b905092915050565b6000611dbe826003612b3390919063ffffffff16565b9050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e40836112e7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e9482600001612b4d565b9050919050565b6000611ea682611da8565b611efb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061379a602c913960400191505060405180910390fd5b6000611f06836112e7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f7557508373ffffffffffffffffffffffffffffffffffffffff16611f5d84610d89565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f865750611f858185611ce4565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611faf826112e7565b73ffffffffffffffffffffffffffffffffffffffff161461201b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806138cf6029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806137766024913960400191505060405180910390fd5b6120ac838383612b5e565b6120b7600082611dcd565b61210881600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612b6e90919063ffffffff16565b5061215a81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612b8890919063ffffffff16565b5061217181836003612ba29092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6121f981600080858152602001908152602001600020600001611d7890919063ffffffff16565b1561226157612206611dc5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006122748360000183612bd7565b60001c905092915050565b6122a681600080858152602001908152602001600020600001612c5a90919063ffffffff16565b1561230e576122b3611dc5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600b60009054906101000a900460ff16612394576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6123d8611dc5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000612410826112e7565b905061241e81600084612b5e565b612429600083611dcd565b60006009600084815260200190815260200160002080546001816001161561010002031660029004905014612478576009600083815260200190815260200160002060006124779190613624565b5b6124c982600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612b6e90919063ffffffff16565b506124de826003612c8a90919063ffffffff16565b5081600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000806000806125528660000186612ca4565b915091508160001c8160001c9350935050509250929050565b600061257e846000018460001b84612d3d565b60001c90509392505050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561263b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b61264481611da8565b156126b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b6126c360008383612b5e565b61271481600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612b8890919063ffffffff16565b5061272b81836003612ba29092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6001816000016000828254019250508190555050565b60006127b082600001612e33565b9050919050565b600b60009054906101000a900460ff161561283a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861287e611dc5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b60006128ba8360000183612bd7565b60001c905092915050565b60006128ed836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612e44565b905092915050565b612900848484611f8f565b61290c84848484612e67565b612961576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806137066032913960400191505060405180910390fd5b50505050565b606060008214156129af576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612aa9565b600082905060005b600082146129d9578080600101915050600a82816129d157fe5b0491506129b7565b60608167ffffffffffffffff811180156129f257600080fd5b506040519080825280601f01601f191660200182016040528015612a255781602001600182028036833780820191505090505b50905060006001830390508593505b60008414612aa157600a8481612a4657fe5b0660300160f81b82828060019003935081518110612a6057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8481612a9957fe5b049350612a34565b819450505050505b919050565b6000612abc82600001612e33565b9050919050565b6000612acf8383612e44565b612b28578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612b2d565b600090505b92915050565b6000612b45836000018360001b613080565b905092915050565b600081600001805490509050919050565b612b698383836130a3565b505050565b6000612b80836000018360001b613111565b905092915050565b6000612b9a836000018360001b612ac3565b905092915050565b6000612bce846000018460001b8473ffffffffffffffffffffffffffffffffffffffff1660001b6131f9565b90509392505050565b600081836000018054905011612c38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061368a6022913960400191505060405180910390fd5b826000018281548110612c4757fe5b9060005260206000200154905092915050565b6000612c82836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613111565b905092915050565b6000612c9c836000018360001b6132d5565b905092915050565b60008082846000018054905011612d06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806138816022913960400191505060405180910390fd5b6000846000018481548110612d1757fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008084600101600085815260200190815260200160002054905060008114158390612e04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612dc9578082015181840152602081019050612dae565b50505050905090810190601f168015612df65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50846000016001820381548110612e1757fe5b9060005260206000209060020201600101549150509392505050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b6000612e888473ffffffffffffffffffffffffffffffffffffffff166133ee565b612e955760019050613078565b6060612fff63150b7a0260e01b612eaa611dc5565b888787604051602401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612f2e578082015181840152602081019050612f13565b50505050905090810190601f168015612f5b5780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051806060016040528060328152602001613706603291398773ffffffffffffffffffffffffffffffffffffffff166134019092919063ffffffff16565b9050600081806020019051602081101561301857600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614925050505b949350505050565b600080836001016000848152602001908152602001600020541415905092915050565b6130ae838383613419565b6130b66112d0565b1561310c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806136ac602b913960400191505060405180910390fd5b505050565b600080836001016000848152602001908152602001600020549050600081146131ed576000600182039050600060018660000180549050039050600086600001828154811061315c57fe5b906000526020600020015490508087600001848154811061317957fe5b90600052602060002001819055506001830187600101600083815260200190815260200160002081905550866000018054806131b157fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506131f3565b60009150505b92915050565b60008084600101600085815260200190815260200160002054905060008114156132a0578460000160405180604001604052808681526020018581525090806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010155505084600001805490508560010160008681526020019081526020016000208190555060019150506132ce565b828560000160018303815481106132b357fe5b90600052602060002090600202016001018190555060009150505b9392505050565b600080836001016000848152602001908152602001600020549050600081146133e2576000600182039050600060018660000180549050039050600086600001828154811061332057fe5b906000526020600020906002020190508087600001848154811061334057fe5b906000526020600020906002020160008201548160000155600182015481600101559050506001830187600101600083600001548152602001908152602001600020819055508660000180548061339357fe5b60019003818190600052602060002090600202016000808201600090556001820160009055505090558660010160008781526020019081526020016000206000905560019450505050506133e8565b60009150505b92915050565b600080823b905060008111915050919050565b6060613410848460008561341e565b90509392505050565b505050565b6060613429856133ee565b61349b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106134eb57805182526020820191506020810190506020830392506134c8565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461354d576040519150601f19603f3d011682016040523d82523d6000602084013e613552565b606091505b5091509150811561356757809250505061361c565b60008151111561357a5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135e15780820151818401526020810190506135c6565b50505050905090810190601f16801561360e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b50805460018160011615610100020316600290046000825580601f1061364a5750613669565b601f016020900490600052602060002090810190613668919061366c565b5b50565b5b8082111561368557600081600090555060010161366d565b509056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732315061757361626c653a20746f6b656e207472616e73666572207768696c6520706175736564416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e744552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732315072657365744d696e7465725061757365724175746f49643a206d75737420686176652070617573657220726f6c6520746f2070617573654552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b654552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644552433732315072657365744d696e7465725061757365724175746f49643a206d7573742068617665206d696e74657220726f6c6520746f206d696e744552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644552433732315072657365744d696e7465725061757365724175746f49643a206d75737420686176652070617573657220726f6c6520746f20756e7061757365416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a264697066735822122012f0da61b8d8bf0c2d2711189f4f9710c927ca7040d7875c8dd265e053a542fd64736f6c63430007000033",
  "compiler": {
    "name": "solc",
    "version": "0.7.0+commit.9e61f92b.Emscripten.clang",
    "optimizer": {
      "enabled": false,
      "runs": 200
    },
    "evmVersion": "petersburg"
  }
}
