{
  "contractName": "Administrative",
  "abi": [
    {
      "inputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdministratorTransferred",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "transferAdministrator",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "admin",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.4.24+commit.e67f0147\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdministrator\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdministratorTransferred\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"renounceOwnership()\":{\"details\":\"\\u653e\\u5f03\\u5408\\u7ea6\\u7684\\u6240\\u6709\\u6743\\uff0c\\u6ce8\\u610f\\uff0c\\u5408\\u7ea6\\u6ca1\\u6709\\u4efb\\u4f55\\u4eba\\u53ef\\u4ee5\\u62e5\\u6709\\u4e86\\uff0c\\u90a3\\u4e48\\u5f88\\u591a\\u62e5\\u6709\\u8005\\u5e94\\u8be5\\u6709\\u7684\\u80fd\\u529b\\uff0c\\u90fd\\u4e0d\\u80fd\\u8bbf\\u95ee\\u4e86\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/chtian/Documents/01_work/01_develope/jcc/jcc-solidity-utils/contracts/owner/Administrative.sol\":\"Administrative\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/chtian/Documents/01_work/01_develope/jcc/jcc-solidity-utils/contracts/owner/Administrative.sol\":{\"keccak256\":\"0xca1f191b7611b7fec06b5c299eaf62dcca56dbbf9f6e3d3eaa7114466df35440\",\"urls\":[\"bzzr://74c8c8a8d3e19a60d6bfe9c7dc3b4c4b037876d5fc4b842ddce6c894e3f0f575\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b506000805433600160a060020a0319918216811780845560018054909316909117909155604051600160a060020a0390911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600154604051600160a060020a03909116906000907f399b55200f7f639a63d76efe3dcfa9156ce367058d6b673041b84a628885f5a7908290a36104f1806100b26000396000f30060806040526004361061006c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663715018a681146100715780638da5cb5b14610088578063c648a3a2146100b9578063f2fde38b146100da578063f851a440146100fb575b600080fd5b34801561007d57600080fd5b50610086610110565b005b34801561009457600080fd5b5061009d6101c9565b60408051600160a060020a039092168252519081900360200190f35b3480156100c557600080fd5b50610086600160a060020a03600435166101d8565b3480156100e657600080fd5b50610086600160a060020a0360043516610366565b34801561010757600080fd5b5061009d6104b6565b600054600160a060020a03163314610172576040805160e560020a62461bcd02815260206004820152601a60248201527f6f6e6c79206f776e65722063616e206d6f646966792074686973000000000000604482015290519081900360640190fd5b60008054604051600160a060020a03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a031690565b600054600160a060020a03163314806101fb5750600154600160a060020a031633145b1515610277576040805160e560020a62461bcd02815260206004820152602b60248201527f6f6e6c79206f776e6572206f722061646d696e6973747261746f722063616e2060448201527f6d6f646966792074686973000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03811615156102fd576040805160e560020a62461bcd02815260206004820152602e60248201527f43616e206e6f74207472616e736665722061646d696e6973747261746f72207460448201527f6f207a65726f2061646472657373000000000000000000000000000000000000606482015290519081900360840190fd5b600154604051600160a060020a038084169216907f399b55200f7f639a63d76efe3dcfa9156ce367058d6b673041b84a628885f5a790600090a36001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a031633146103c8576040805160e560020a62461bcd02815260206004820152601a60248201527f6f6e6c79206f776e65722063616e206d6f646966792074686973000000000000604482015290519081900360640190fd5b600160a060020a038116151561044e576040805160e560020a62461bcd02815260206004820152602660248201527f43616e206e6f74207472616e73666572206f776e657220746f207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a0316905600a165627a7a723058200f0943204997312a624fc8afee3c147d9f361d898fca93dc7a1c2156ec019f130029",
  "deployedBytecode": "0x60806040526004361061006c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663715018a681146100715780638da5cb5b14610088578063c648a3a2146100b9578063f2fde38b146100da578063f851a440146100fb575b600080fd5b34801561007d57600080fd5b50610086610110565b005b34801561009457600080fd5b5061009d6101c9565b60408051600160a060020a039092168252519081900360200190f35b3480156100c557600080fd5b50610086600160a060020a03600435166101d8565b3480156100e657600080fd5b50610086600160a060020a0360043516610366565b34801561010757600080fd5b5061009d6104b6565b600054600160a060020a03163314610172576040805160e560020a62461bcd02815260206004820152601a60248201527f6f6e6c79206f776e65722063616e206d6f646966792074686973000000000000604482015290519081900360640190fd5b60008054604051600160a060020a03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a031690565b600054600160a060020a03163314806101fb5750600154600160a060020a031633145b1515610277576040805160e560020a62461bcd02815260206004820152602b60248201527f6f6e6c79206f776e6572206f722061646d696e6973747261746f722063616e2060448201527f6d6f646966792074686973000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03811615156102fd576040805160e560020a62461bcd02815260206004820152602e60248201527f43616e206e6f74207472616e736665722061646d696e6973747261746f72207460448201527f6f207a65726f2061646472657373000000000000000000000000000000000000606482015290519081900360840190fd5b600154604051600160a060020a038084169216907f399b55200f7f639a63d76efe3dcfa9156ce367058d6b673041b84a628885f5a790600090a36001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a031633146103c8576040805160e560020a62461bcd02815260206004820152601a60248201527f6f6e6c79206f776e65722063616e206d6f646966792074686973000000000000604482015290519081900360640190fd5b600160a060020a038116151561044e576040805160e560020a62461bcd02815260206004820152602660248201527f43616e206e6f74207472616e73666572206f776e657220746f207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a0316905600a165627a7a723058200f0943204997312a624fc8afee3c147d9f361d898fca93dc7a1c2156ec019f130029",
  "sourceMap": "752:1854:30:-;;;1115:182;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1142:6:30;:19;;1151:10;-1:-1:-1;;;;;;1142:19:30;;;;;;;;-1:-1:-1;1167:19:30;;;;;;;;;;;1197:40;;-1:-1:-1;;;;;1230:6:30;;;;1142;1197:40;;1142:6;;1197:40;1285:6;;1248:44;;-1:-1:-1;;;;;1285:6:30;;;;;;1248:44;;1285:6;;1248:44;752:1854;;;;;;",
  "deployedSourceMap": "752:1854:30:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1844:127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1844:127:30;;;;;;2458:71;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2458:71:30;;;;;;;;-1:-1:-1;;;;;2458:71:30;;;;;;;;;;;;;;2197:257;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2197:257:30;-1:-1:-1;;;;;2197:257:30;;;;;1975:218;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1975:218:30;-1:-1:-1;;;;;1975:218:30;;;;;2533:71;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2533:71:30;;;;1844:127;1350:6;;-1:-1:-1;;;;;1350:6:30;1336:10;:20;1328:59;;;;;-1:-1:-1;;;;;1328:59:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;1938:1;1922:6;;1901:40;;-1:-1:-1;;;;;1922:6:30;;;;1901:40;;1938:1;;1901:40;1964:1;1947:19;;-1:-1:-1;;1947:19:30;;;1844:127::o;2458:71::-;2496:7;2518:6;-1:-1:-1;;;;;2518:6:30;2458:71;:::o;2197:257::-;1581:6;;-1:-1:-1;;;;;1581:6:30;1567:10;:20;;1566:48;;-1:-1:-1;1607:6:30;;-1:-1:-1;;;;;1607:6:30;1593:10;:20;1566:48;1551:122;;;;;;;-1:-1:-1;;;;;1551:122:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2289:22:30;;;;2274:99;;;;;-1:-1:-1;;;;;2274:99:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2409:6;;2384:42;;-1:-1:-1;;;;;2384:42:30;;;;2409:6;;2384:42;;2409:6;;2384:42;2432:6;:17;;-1:-1:-1;;2432:17:30;-1:-1:-1;;;;;2432:17:30;;;;;;;;;;2197:257::o;1975:218::-;1350:6;;-1:-1:-1;;;;;1350:6:30;1336:10;:20;1328:59;;;;;-1:-1:-1;;;;;1328:59:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2051:22:30;;;;2043:73;;;;;-1:-1:-1;;;;;2043:73:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2148:6;;;2127:38;;-1:-1:-1;;;;;2127:38:30;;;;2148:6;;;2127:38;;;2171:6;:17;;-1:-1:-1;;2171:17:30;-1:-1:-1;;;;;2171:17:30;;;;;;;;;;1975:218::o;2533:71::-;2593:6;;-1:-1:-1;;;;;2593:6:30;2533:71;:::o",
  "source": "pragma solidity >=0.4.24;\n\n/**\n@dev Administrative 为合约提供控制权限，可以通过继承该合约的方式获得这些功能\n`onlyOwner` 这样的 modifier 可以在合约中使用，通常用来表达所有权\n`onlyAdministrator` 用来表达运行经营权力，和所有权分开，这样的设计可以满足项目资产拥有者和经营者进行区分的场合\n无论是拥有者还是经营者，都可以是一个多签名的合约钱包，用投票方式决定权利的转移\n建议使用的场景：\n1. 拥有者是最后的裁决者，可以决定经营者和拥有者任免，也能决定合约自杀后的资金转移\n2. 经营者可以就业务中各种情况进行决策，根据授权决定资金转移和经营者变更\n */\ncontract Administrative {\n  address private _owner;\n  address private _admin;\n\n  event OwnershipTransferred(\n    address indexed previousOwner,\n    address indexed newOwner\n  );\n  event AdministratorTransferred(\n    address indexed previousAdmin,\n    address indexed newAdmin\n  );\n\n  /**\n  @dev 初始化合约时，部署合约的账户自动成为owner\n   */\n  constructor() public {\n    _owner = msg.sender;\n    _admin = msg.sender;\n    emit OwnershipTransferred(address(0), _owner);\n    emit AdministratorTransferred(address(0), _admin);\n  }\n\n  modifier onlyOwner() {\n    require(msg.sender == _owner, \"only owner can modify this\");\n    _;\n  }\n\n  modifier onlyAdministrator {\n    require(msg.sender == _admin, \"only administrator can modify this\");\n    _;\n  }\n\n  modifier onlyPrivileged() {\n    require(\n      (msg.sender == _owner) || (msg.sender == _admin),\n      \"only owner or administrator can modify this\"\n    );\n    _;\n  }\n\n  /**\n  @dev 放弃合约的所有权，注意，合约没有任何人可以拥有了，那么很多拥有者应该有的能力，都不能访问了\n   */\n  function renounceOwnership() public onlyOwner {\n    emit OwnershipTransferred(_owner, address(0));\n    _owner = address(0);\n  }\n\n  function transferOwnership(address newOwner) public onlyOwner {\n    require(newOwner != address(0), \"Can not transfer owner to zero address\");\n    emit OwnershipTransferred(_owner, newOwner);\n    _owner = newOwner;\n  }\n\n  function transferAdministrator(address newAdmin) public onlyPrivileged {\n    require(\n      newAdmin != address(0),\n      \"Can not transfer administrator to zero address\"\n    );\n    emit AdministratorTransferred(_admin, newAdmin);\n    _admin = newAdmin;\n  }\n\n  function owner() public view returns (address) {\n    return _owner;\n  }\n\n  function admin() public view returns (address) {\n    return _admin;\n  }\n}\n",
  "sourcePath": "/Users/chtian/Documents/01_work/01_develope/jcc/jcc-solidity-utils/contracts/owner/Administrative.sol",
  "ast": {
    "absolutePath": "/Users/chtian/Documents/01_work/01_develope/jcc/jcc-solidity-utils/contracts/owner/Administrative.sol",
    "exportedSymbols": {
      "Administrative": [
        6730
      ]
    },
    "id": 6731,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 6555,
        "literals": [
          "solidity",
          ">=",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:25:30"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": "@dev Administrative 为合约提供控制权限，可以通过继承该合约的方式获得这些功能\n`onlyOwner` 这样的 modifier 可以在合约中使用，通常用来表达所有权\n`onlyAdministrator` 用来表达运行经营权力，和所有权分开，这样的设计可以满足项目资产拥有者和经营者进行区分的场合\n无论是拥有者还是经营者，都可以是一个多签名的合约钱包，用投票方式决定权利的转移\n建议使用的场景：\n1. 拥有者是最后的裁决者，可以决定经营者和拥有者任免，也能决定合约自杀后的资金转移\n2. 经营者可以就业务中各种情况进行决策，根据授权决定资金转移和经营者变更",
        "fullyImplemented": true,
        "id": 6730,
        "linearizedBaseContracts": [
          6730
        ],
        "name": "Administrative",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 6557,
            "name": "_owner",
            "nodeType": "VariableDeclaration",
            "scope": 6730,
            "src": "780:22:30",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 6556,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "780:7:30",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 6559,
            "name": "_admin",
            "nodeType": "VariableDeclaration",
            "scope": 6730,
            "src": "806:22:30",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 6558,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "806:7:30",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 6565,
            "name": "OwnershipTransferred",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6564,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6561,
                  "indexed": true,
                  "name": "previousOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 6565,
                  "src": "865:29:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6560,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "865:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6563,
                  "indexed": true,
                  "name": "newOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 6565,
                  "src": "900:24:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6562,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "900:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "859:69:30"
            },
            "src": "833:96:30"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 6571,
            "name": "AdministratorTransferred",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6570,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6567,
                  "indexed": true,
                  "name": "previousAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 6571,
                  "src": "968:29:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6566,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "968:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6569,
                  "indexed": true,
                  "name": "newAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 6571,
                  "src": "1003:24:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6568,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1003:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "962:69:30"
            },
            "src": "932:100:30"
          },
          {
            "body": {
              "id": 6598,
              "nodeType": "Block",
              "src": "1136:161:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6577,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6574,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6557,
                      "src": "1142:6:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6575,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9041,
                        "src": "1151:3:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 6576,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1151:10:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1142:19:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 6578,
                  "nodeType": "ExpressionStatement",
                  "src": "1142:19:30"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6582,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6579,
                      "name": "_admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6559,
                      "src": "1167:6:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6580,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9041,
                        "src": "1176:3:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 6581,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1176:10:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1167:19:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 6583,
                  "nodeType": "ExpressionStatement",
                  "src": "1167:19:30"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6586,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1226:1:30",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 6585,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1218:7:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 6587,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1218:10:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6588,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6557,
                        "src": "1230:6:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6584,
                      "name": "OwnershipTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6565,
                      "src": "1197:20:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 6589,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1197:40:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6590,
                  "nodeType": "EmitStatement",
                  "src": "1192:45:30"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6593,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1281:1:30",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 6592,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1273:7:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 6594,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1273:10:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6595,
                        "name": "_admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6559,
                        "src": "1285:6:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6591,
                      "name": "AdministratorTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6571,
                      "src": "1248:24:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 6596,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1248:44:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6597,
                  "nodeType": "EmitStatement",
                  "src": "1243:49:30"
                }
              ]
            },
            "documentation": "@dev 初始化合约时，部署合约的账户自动成为owner",
            "id": 6599,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6572,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1126:2:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 6573,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1136:0:30"
            },
            "scope": 6730,
            "src": "1115:182:30",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6610,
              "nodeType": "Block",
              "src": "1322:77:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6605,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6602,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9041,
                            "src": "1336:3:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 6603,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1336:10:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 6604,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6557,
                          "src": "1350:6:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1336:20:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6f6e6c79206f776e65722063616e206d6f646966792074686973",
                        "id": 6606,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1358:28:30",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_355ac0e17d6a565ff88bb4c97cca20076bb1a3cc93c51e8ecadf7ae23a7ac293",
                          "typeString": "literal_string \"only owner can modify this\""
                        },
                        "value": "only owner can modify this"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_355ac0e17d6a565ff88bb4c97cca20076bb1a3cc93c51e8ecadf7ae23a7ac293",
                          "typeString": "literal_string \"only owner can modify this\""
                        }
                      ],
                      "id": 6601,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9044,
                        9045
                      ],
                      "referencedDeclaration": 9045,
                      "src": "1328:7:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1328:59:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6608,
                  "nodeType": "ExpressionStatement",
                  "src": "1328:59:30"
                },
                {
                  "id": 6609,
                  "nodeType": "PlaceholderStatement",
                  "src": "1393:1:30"
                }
              ]
            },
            "documentation": null,
            "id": 6611,
            "name": "onlyOwner",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 6600,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1319:2:30"
            },
            "src": "1301:98:30",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6622,
              "nodeType": "Block",
              "src": "1430:85:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6617,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6614,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9041,
                            "src": "1444:3:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 6615,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1444:10:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 6616,
                          "name": "_admin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6559,
                          "src": "1458:6:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1444:20:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6f6e6c792061646d696e6973747261746f722063616e206d6f646966792074686973",
                        "id": 6618,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1466:36:30",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_49e3f0e75cbf97bb6014b9372398174d905b913f6943ced801184a38efcde7c1",
                          "typeString": "literal_string \"only administrator can modify this\""
                        },
                        "value": "only administrator can modify this"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_49e3f0e75cbf97bb6014b9372398174d905b913f6943ced801184a38efcde7c1",
                          "typeString": "literal_string \"only administrator can modify this\""
                        }
                      ],
                      "id": 6613,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9044,
                        9045
                      ],
                      "referencedDeclaration": 9045,
                      "src": "1436:7:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1436:67:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6620,
                  "nodeType": "ExpressionStatement",
                  "src": "1436:67:30"
                },
                {
                  "id": 6621,
                  "nodeType": "PlaceholderStatement",
                  "src": "1509:1:30"
                }
              ]
            },
            "documentation": null,
            "id": 6623,
            "name": "onlyAdministrator",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 6612,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1430:0:30"
            },
            "src": "1403:112:30",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6641,
              "nodeType": "Block",
              "src": "1545:140:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 6636,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 6629,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6626,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9041,
                                  "src": "1567:3:30",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 6627,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1567:10:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 6628,
                                "name": "_owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6557,
                                "src": "1581:6:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "1567:20:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 6630,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1566:22:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 6634,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6631,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9041,
                                  "src": "1593:3:30",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 6632,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1593:10:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 6633,
                                "name": "_admin",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6559,
                                "src": "1607:6:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "1593:20:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 6635,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1592:22:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1566:48:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6f6e6c79206f776e6572206f722061646d696e6973747261746f722063616e206d6f646966792074686973",
                        "id": 6637,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1622:45:30",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2bded928088a2a0738d41bb9fdd04535c31758fbc771ef0c1557367c1496ac8f",
                          "typeString": "literal_string \"only owner or administrator can modify this\""
                        },
                        "value": "only owner or administrator can modify this"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2bded928088a2a0738d41bb9fdd04535c31758fbc771ef0c1557367c1496ac8f",
                          "typeString": "literal_string \"only owner or administrator can modify this\""
                        }
                      ],
                      "id": 6625,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9044,
                        9045
                      ],
                      "referencedDeclaration": 9045,
                      "src": "1551:7:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6638,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1551:122:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6639,
                  "nodeType": "ExpressionStatement",
                  "src": "1551:122:30"
                },
                {
                  "id": 6640,
                  "nodeType": "PlaceholderStatement",
                  "src": "1679:1:30"
                }
              ]
            },
            "documentation": null,
            "id": 6642,
            "name": "onlyPrivileged",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 6624,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1542:2:30"
            },
            "src": "1519:166:30",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6660,
              "nodeType": "Block",
              "src": "1890:81:30",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6648,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6557,
                        "src": "1922:6:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6650,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1938:1:30",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 6649,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1930:7:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 6651,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1930:10:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6647,
                      "name": "OwnershipTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6565,
                      "src": "1901:20:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 6652,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1901:40:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6653,
                  "nodeType": "EmitStatement",
                  "src": "1896:45:30"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6658,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6654,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6557,
                      "src": "1947:6:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 6656,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1964:1:30",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 6655,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1956:7:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 6657,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1956:10:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1947:19:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 6659,
                  "nodeType": "ExpressionStatement",
                  "src": "1947:19:30"
                }
              ]
            },
            "documentation": "@dev 放弃合约的所有权，注意，合约没有任何人可以拥有了，那么很多拥有者应该有的能力，都不能访问了",
            "id": 6661,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 6645,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6644,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6611,
                  "src": "1880:9:30",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1880:9:30"
              }
            ],
            "name": "renounceOwnership",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6643,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1870:2:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 6646,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1890:0:30"
            },
            "scope": 6730,
            "src": "1844:127:30",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6686,
              "nodeType": "Block",
              "src": "2037:156:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6673,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 6669,
                          "name": "newOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6663,
                          "src": "2051:8:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 6671,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2071:1:30",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 6670,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2063:7:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 6672,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2063:10:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2051:22:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "43616e206e6f74207472616e73666572206f776e657220746f207a65726f2061646472657373",
                        "id": 6674,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2075:40:30",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_59161a03cd7ae9ed145134888088f01dbfac81e9174c433062cd7ea7fb0957af",
                          "typeString": "literal_string \"Can not transfer owner to zero address\""
                        },
                        "value": "Can not transfer owner to zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_59161a03cd7ae9ed145134888088f01dbfac81e9174c433062cd7ea7fb0957af",
                          "typeString": "literal_string \"Can not transfer owner to zero address\""
                        }
                      ],
                      "id": 6668,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9044,
                        9045
                      ],
                      "referencedDeclaration": 9045,
                      "src": "2043:7:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6675,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2043:73:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6676,
                  "nodeType": "ExpressionStatement",
                  "src": "2043:73:30"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6678,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6557,
                        "src": "2148:6:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6679,
                        "name": "newOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6663,
                        "src": "2156:8:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6677,
                      "name": "OwnershipTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6565,
                      "src": "2127:20:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 6680,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2127:38:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6681,
                  "nodeType": "EmitStatement",
                  "src": "2122:43:30"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6684,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6682,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6557,
                      "src": "2171:6:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6683,
                      "name": "newOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6663,
                      "src": "2180:8:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2171:17:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 6685,
                  "nodeType": "ExpressionStatement",
                  "src": "2171:17:30"
                }
              ]
            },
            "documentation": null,
            "id": 6687,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 6666,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6665,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6611,
                  "src": "2027:9:30",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2027:9:30"
              }
            ],
            "name": "transferOwnership",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6664,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6663,
                  "name": "newOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 6687,
                  "src": "2002:16:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6662,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2002:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2001:18:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 6667,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2037:0:30"
            },
            "scope": 6730,
            "src": "1975:218:30",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6712,
              "nodeType": "Block",
              "src": "2268:186:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6699,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 6695,
                          "name": "newAdmin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6689,
                          "src": "2289:8:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 6697,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2309:1:30",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 6696,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2301:7:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 6698,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2301:10:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2289:22:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "43616e206e6f74207472616e736665722061646d696e6973747261746f7220746f207a65726f2061646472657373",
                        "id": 6700,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2319:48:30",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2f8b76ba6c09877508977472f95bbf6fdb189c884f2c93c5d7d6168c44e787c6",
                          "typeString": "literal_string \"Can not transfer administrator to zero address\""
                        },
                        "value": "Can not transfer administrator to zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2f8b76ba6c09877508977472f95bbf6fdb189c884f2c93c5d7d6168c44e787c6",
                          "typeString": "literal_string \"Can not transfer administrator to zero address\""
                        }
                      ],
                      "id": 6694,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9044,
                        9045
                      ],
                      "referencedDeclaration": 9045,
                      "src": "2274:7:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6701,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2274:99:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6702,
                  "nodeType": "ExpressionStatement",
                  "src": "2274:99:30"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6704,
                        "name": "_admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6559,
                        "src": "2409:6:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6705,
                        "name": "newAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6689,
                        "src": "2417:8:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6703,
                      "name": "AdministratorTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6571,
                      "src": "2384:24:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 6706,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2384:42:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6707,
                  "nodeType": "EmitStatement",
                  "src": "2379:47:30"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6710,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6708,
                      "name": "_admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6559,
                      "src": "2432:6:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6709,
                      "name": "newAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6689,
                      "src": "2441:8:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2432:17:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 6711,
                  "nodeType": "ExpressionStatement",
                  "src": "2432:17:30"
                }
              ]
            },
            "documentation": null,
            "id": 6713,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 6692,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6691,
                  "name": "onlyPrivileged",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6642,
                  "src": "2253:14:30",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2253:14:30"
              }
            ],
            "name": "transferAdministrator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6690,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6689,
                  "name": "newAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 6713,
                  "src": "2228:16:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6688,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2228:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2227:18:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 6693,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2268:0:30"
            },
            "scope": 6730,
            "src": "2197:257:30",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6720,
              "nodeType": "Block",
              "src": "2505:24:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6718,
                    "name": "_owner",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6557,
                    "src": "2518:6:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 6717,
                  "id": 6719,
                  "nodeType": "Return",
                  "src": "2511:13:30"
                }
              ]
            },
            "documentation": null,
            "id": 6721,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "owner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6714,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2472:2:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 6717,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6716,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6721,
                  "src": "2496:7:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6715,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2496:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2495:9:30"
            },
            "scope": 6730,
            "src": "2458:71:30",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6728,
              "nodeType": "Block",
              "src": "2580:24:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6726,
                    "name": "_admin",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6559,
                    "src": "2593:6:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 6725,
                  "id": 6727,
                  "nodeType": "Return",
                  "src": "2586:13:30"
                }
              ]
            },
            "documentation": null,
            "id": 6729,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "admin",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6722,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2547:2:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 6725,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6724,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6729,
                  "src": "2571:7:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6723,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2571:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2570:9:30"
            },
            "scope": 6730,
            "src": "2533:71:30",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 6731,
        "src": "752:1854:30"
      }
    ],
    "src": "0:2607:30"
  },
  "legacyAST": {
    "absolutePath": "/Users/chtian/Documents/01_work/01_develope/jcc/jcc-solidity-utils/contracts/owner/Administrative.sol",
    "exportedSymbols": {
      "Administrative": [
        6730
      ]
    },
    "id": 6731,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 6555,
        "literals": [
          "solidity",
          ">=",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:25:30"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": "@dev Administrative 为合约提供控制权限，可以通过继承该合约的方式获得这些功能\n`onlyOwner` 这样的 modifier 可以在合约中使用，通常用来表达所有权\n`onlyAdministrator` 用来表达运行经营权力，和所有权分开，这样的设计可以满足项目资产拥有者和经营者进行区分的场合\n无论是拥有者还是经营者，都可以是一个多签名的合约钱包，用投票方式决定权利的转移\n建议使用的场景：\n1. 拥有者是最后的裁决者，可以决定经营者和拥有者任免，也能决定合约自杀后的资金转移\n2. 经营者可以就业务中各种情况进行决策，根据授权决定资金转移和经营者变更",
        "fullyImplemented": true,
        "id": 6730,
        "linearizedBaseContracts": [
          6730
        ],
        "name": "Administrative",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 6557,
            "name": "_owner",
            "nodeType": "VariableDeclaration",
            "scope": 6730,
            "src": "780:22:30",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 6556,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "780:7:30",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 6559,
            "name": "_admin",
            "nodeType": "VariableDeclaration",
            "scope": 6730,
            "src": "806:22:30",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 6558,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "806:7:30",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 6565,
            "name": "OwnershipTransferred",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6564,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6561,
                  "indexed": true,
                  "name": "previousOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 6565,
                  "src": "865:29:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6560,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "865:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6563,
                  "indexed": true,
                  "name": "newOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 6565,
                  "src": "900:24:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6562,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "900:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "859:69:30"
            },
            "src": "833:96:30"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 6571,
            "name": "AdministratorTransferred",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6570,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6567,
                  "indexed": true,
                  "name": "previousAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 6571,
                  "src": "968:29:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6566,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "968:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6569,
                  "indexed": true,
                  "name": "newAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 6571,
                  "src": "1003:24:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6568,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1003:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "962:69:30"
            },
            "src": "932:100:30"
          },
          {
            "body": {
              "id": 6598,
              "nodeType": "Block",
              "src": "1136:161:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6577,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6574,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6557,
                      "src": "1142:6:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6575,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9041,
                        "src": "1151:3:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 6576,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1151:10:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1142:19:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 6578,
                  "nodeType": "ExpressionStatement",
                  "src": "1142:19:30"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6582,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6579,
                      "name": "_admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6559,
                      "src": "1167:6:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6580,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9041,
                        "src": "1176:3:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 6581,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1176:10:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1167:19:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 6583,
                  "nodeType": "ExpressionStatement",
                  "src": "1167:19:30"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6586,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1226:1:30",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 6585,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1218:7:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 6587,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1218:10:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6588,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6557,
                        "src": "1230:6:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6584,
                      "name": "OwnershipTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6565,
                      "src": "1197:20:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 6589,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1197:40:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6590,
                  "nodeType": "EmitStatement",
                  "src": "1192:45:30"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6593,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1281:1:30",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 6592,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1273:7:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 6594,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1273:10:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6595,
                        "name": "_admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6559,
                        "src": "1285:6:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6591,
                      "name": "AdministratorTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6571,
                      "src": "1248:24:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 6596,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1248:44:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6597,
                  "nodeType": "EmitStatement",
                  "src": "1243:49:30"
                }
              ]
            },
            "documentation": "@dev 初始化合约时，部署合约的账户自动成为owner",
            "id": 6599,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6572,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1126:2:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 6573,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1136:0:30"
            },
            "scope": 6730,
            "src": "1115:182:30",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6610,
              "nodeType": "Block",
              "src": "1322:77:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6605,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6602,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9041,
                            "src": "1336:3:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 6603,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1336:10:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 6604,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6557,
                          "src": "1350:6:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1336:20:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6f6e6c79206f776e65722063616e206d6f646966792074686973",
                        "id": 6606,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1358:28:30",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_355ac0e17d6a565ff88bb4c97cca20076bb1a3cc93c51e8ecadf7ae23a7ac293",
                          "typeString": "literal_string \"only owner can modify this\""
                        },
                        "value": "only owner can modify this"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_355ac0e17d6a565ff88bb4c97cca20076bb1a3cc93c51e8ecadf7ae23a7ac293",
                          "typeString": "literal_string \"only owner can modify this\""
                        }
                      ],
                      "id": 6601,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9044,
                        9045
                      ],
                      "referencedDeclaration": 9045,
                      "src": "1328:7:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1328:59:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6608,
                  "nodeType": "ExpressionStatement",
                  "src": "1328:59:30"
                },
                {
                  "id": 6609,
                  "nodeType": "PlaceholderStatement",
                  "src": "1393:1:30"
                }
              ]
            },
            "documentation": null,
            "id": 6611,
            "name": "onlyOwner",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 6600,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1319:2:30"
            },
            "src": "1301:98:30",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6622,
              "nodeType": "Block",
              "src": "1430:85:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6617,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6614,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9041,
                            "src": "1444:3:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 6615,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1444:10:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 6616,
                          "name": "_admin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6559,
                          "src": "1458:6:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1444:20:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6f6e6c792061646d696e6973747261746f722063616e206d6f646966792074686973",
                        "id": 6618,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1466:36:30",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_49e3f0e75cbf97bb6014b9372398174d905b913f6943ced801184a38efcde7c1",
                          "typeString": "literal_string \"only administrator can modify this\""
                        },
                        "value": "only administrator can modify this"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_49e3f0e75cbf97bb6014b9372398174d905b913f6943ced801184a38efcde7c1",
                          "typeString": "literal_string \"only administrator can modify this\""
                        }
                      ],
                      "id": 6613,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9044,
                        9045
                      ],
                      "referencedDeclaration": 9045,
                      "src": "1436:7:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1436:67:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6620,
                  "nodeType": "ExpressionStatement",
                  "src": "1436:67:30"
                },
                {
                  "id": 6621,
                  "nodeType": "PlaceholderStatement",
                  "src": "1509:1:30"
                }
              ]
            },
            "documentation": null,
            "id": 6623,
            "name": "onlyAdministrator",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 6612,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1430:0:30"
            },
            "src": "1403:112:30",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6641,
              "nodeType": "Block",
              "src": "1545:140:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 6636,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 6629,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6626,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9041,
                                  "src": "1567:3:30",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 6627,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1567:10:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 6628,
                                "name": "_owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6557,
                                "src": "1581:6:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "1567:20:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 6630,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1566:22:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 6634,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6631,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9041,
                                  "src": "1593:3:30",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 6632,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1593:10:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 6633,
                                "name": "_admin",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6559,
                                "src": "1607:6:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "1593:20:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 6635,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1592:22:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1566:48:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6f6e6c79206f776e6572206f722061646d696e6973747261746f722063616e206d6f646966792074686973",
                        "id": 6637,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1622:45:30",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2bded928088a2a0738d41bb9fdd04535c31758fbc771ef0c1557367c1496ac8f",
                          "typeString": "literal_string \"only owner or administrator can modify this\""
                        },
                        "value": "only owner or administrator can modify this"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2bded928088a2a0738d41bb9fdd04535c31758fbc771ef0c1557367c1496ac8f",
                          "typeString": "literal_string \"only owner or administrator can modify this\""
                        }
                      ],
                      "id": 6625,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9044,
                        9045
                      ],
                      "referencedDeclaration": 9045,
                      "src": "1551:7:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6638,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1551:122:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6639,
                  "nodeType": "ExpressionStatement",
                  "src": "1551:122:30"
                },
                {
                  "id": 6640,
                  "nodeType": "PlaceholderStatement",
                  "src": "1679:1:30"
                }
              ]
            },
            "documentation": null,
            "id": 6642,
            "name": "onlyPrivileged",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 6624,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1542:2:30"
            },
            "src": "1519:166:30",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6660,
              "nodeType": "Block",
              "src": "1890:81:30",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6648,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6557,
                        "src": "1922:6:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6650,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1938:1:30",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 6649,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1930:7:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 6651,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1930:10:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6647,
                      "name": "OwnershipTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6565,
                      "src": "1901:20:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 6652,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1901:40:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6653,
                  "nodeType": "EmitStatement",
                  "src": "1896:45:30"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6658,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6654,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6557,
                      "src": "1947:6:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 6656,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1964:1:30",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 6655,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1956:7:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 6657,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1956:10:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1947:19:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 6659,
                  "nodeType": "ExpressionStatement",
                  "src": "1947:19:30"
                }
              ]
            },
            "documentation": "@dev 放弃合约的所有权，注意，合约没有任何人可以拥有了，那么很多拥有者应该有的能力，都不能访问了",
            "id": 6661,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 6645,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6644,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6611,
                  "src": "1880:9:30",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1880:9:30"
              }
            ],
            "name": "renounceOwnership",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6643,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1870:2:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 6646,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1890:0:30"
            },
            "scope": 6730,
            "src": "1844:127:30",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6686,
              "nodeType": "Block",
              "src": "2037:156:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6673,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 6669,
                          "name": "newOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6663,
                          "src": "2051:8:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 6671,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2071:1:30",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 6670,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2063:7:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 6672,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2063:10:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2051:22:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "43616e206e6f74207472616e73666572206f776e657220746f207a65726f2061646472657373",
                        "id": 6674,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2075:40:30",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_59161a03cd7ae9ed145134888088f01dbfac81e9174c433062cd7ea7fb0957af",
                          "typeString": "literal_string \"Can not transfer owner to zero address\""
                        },
                        "value": "Can not transfer owner to zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_59161a03cd7ae9ed145134888088f01dbfac81e9174c433062cd7ea7fb0957af",
                          "typeString": "literal_string \"Can not transfer owner to zero address\""
                        }
                      ],
                      "id": 6668,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9044,
                        9045
                      ],
                      "referencedDeclaration": 9045,
                      "src": "2043:7:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6675,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2043:73:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6676,
                  "nodeType": "ExpressionStatement",
                  "src": "2043:73:30"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6678,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6557,
                        "src": "2148:6:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6679,
                        "name": "newOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6663,
                        "src": "2156:8:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6677,
                      "name": "OwnershipTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6565,
                      "src": "2127:20:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 6680,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2127:38:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6681,
                  "nodeType": "EmitStatement",
                  "src": "2122:43:30"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6684,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6682,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6557,
                      "src": "2171:6:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6683,
                      "name": "newOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6663,
                      "src": "2180:8:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2171:17:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 6685,
                  "nodeType": "ExpressionStatement",
                  "src": "2171:17:30"
                }
              ]
            },
            "documentation": null,
            "id": 6687,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 6666,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6665,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6611,
                  "src": "2027:9:30",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2027:9:30"
              }
            ],
            "name": "transferOwnership",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6664,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6663,
                  "name": "newOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 6687,
                  "src": "2002:16:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6662,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2002:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2001:18:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 6667,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2037:0:30"
            },
            "scope": 6730,
            "src": "1975:218:30",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6712,
              "nodeType": "Block",
              "src": "2268:186:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6699,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 6695,
                          "name": "newAdmin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6689,
                          "src": "2289:8:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 6697,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2309:1:30",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 6696,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2301:7:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 6698,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2301:10:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2289:22:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "43616e206e6f74207472616e736665722061646d696e6973747261746f7220746f207a65726f2061646472657373",
                        "id": 6700,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2319:48:30",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2f8b76ba6c09877508977472f95bbf6fdb189c884f2c93c5d7d6168c44e787c6",
                          "typeString": "literal_string \"Can not transfer administrator to zero address\""
                        },
                        "value": "Can not transfer administrator to zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2f8b76ba6c09877508977472f95bbf6fdb189c884f2c93c5d7d6168c44e787c6",
                          "typeString": "literal_string \"Can not transfer administrator to zero address\""
                        }
                      ],
                      "id": 6694,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9044,
                        9045
                      ],
                      "referencedDeclaration": 9045,
                      "src": "2274:7:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6701,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2274:99:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6702,
                  "nodeType": "ExpressionStatement",
                  "src": "2274:99:30"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6704,
                        "name": "_admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6559,
                        "src": "2409:6:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6705,
                        "name": "newAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6689,
                        "src": "2417:8:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6703,
                      "name": "AdministratorTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6571,
                      "src": "2384:24:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 6706,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2384:42:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6707,
                  "nodeType": "EmitStatement",
                  "src": "2379:47:30"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6710,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6708,
                      "name": "_admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6559,
                      "src": "2432:6:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6709,
                      "name": "newAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6689,
                      "src": "2441:8:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2432:17:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 6711,
                  "nodeType": "ExpressionStatement",
                  "src": "2432:17:30"
                }
              ]
            },
            "documentation": null,
            "id": 6713,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 6692,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6691,
                  "name": "onlyPrivileged",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6642,
                  "src": "2253:14:30",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2253:14:30"
              }
            ],
            "name": "transferAdministrator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6690,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6689,
                  "name": "newAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 6713,
                  "src": "2228:16:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6688,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2228:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2227:18:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 6693,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2268:0:30"
            },
            "scope": 6730,
            "src": "2197:257:30",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6720,
              "nodeType": "Block",
              "src": "2505:24:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6718,
                    "name": "_owner",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6557,
                    "src": "2518:6:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 6717,
                  "id": 6719,
                  "nodeType": "Return",
                  "src": "2511:13:30"
                }
              ]
            },
            "documentation": null,
            "id": 6721,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "owner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6714,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2472:2:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 6717,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6716,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6721,
                  "src": "2496:7:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6715,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2496:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2495:9:30"
            },
            "scope": 6730,
            "src": "2458:71:30",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6728,
              "nodeType": "Block",
              "src": "2580:24:30",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6726,
                    "name": "_admin",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6559,
                    "src": "2593:6:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 6725,
                  "id": 6727,
                  "nodeType": "Return",
                  "src": "2586:13:30"
                }
              ]
            },
            "documentation": null,
            "id": 6729,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "admin",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6722,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2547:2:30"
            },
            "payable": false,
            "returnParameters": {
              "id": 6725,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6724,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6729,
                  "src": "2571:7:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6723,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2571:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2570:9:30"
            },
            "scope": 6730,
            "src": "2533:71:30",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 6731,
        "src": "752:1854:30"
      }
    ],
    "src": "0:2607:30"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.16",
  "updatedAt": "2021-03-06T09:30:01.053Z",
  "devdoc": {
    "methods": {
      "renounceOwnership()": {
        "details": "放弃合约的所有权，注意，合约没有任何人可以拥有了，那么很多拥有者应该有的能力，都不能访问了"
      }
    }
  },
  "userdoc": {
    "methods": {}
  }
}