{
	"fileName": "DIDRegistry.sol",
	"contractName": "DIDRegistry",
	"source": "//SPDX-License-Identifier: UNLICENSED\n\npragma solidity >=0.6.0 <0.7.0;\n\nimport \"./SafeMath.sol\";\nimport \"./IDIDRegistry.sol\";\n\ncontract DIDRegistry is IDIDRegistry {\n\n    using SafeMath for uint256;\n\n    mapping(address => address[]) public controllers;\n    mapping(address => DIDConfig) private configs;\n    mapping(address => uint) public changed;\n    mapping(address => uint) public nonce;\n\n    uint private minKeyRotationTime;\n\n    constructor( uint _minKeyRotationTime ) public {\n        minKeyRotationTime = _minKeyRotationTime;\n    }\n\n    modifier onlyController(address identity, address actor) {\n        require(actor == identityController(identity));\n        _;\n    }\n\n    function getControllers() public view returns (address[] memory) {\n        return controllers[msg.sender];\n    }\n\n    function identityController(address identity) public view returns (address) {\n        uint len = controllers[identity].length;\n        if (len == 0) return identity;\n        if (len == 1) return controllers[identity][0];\n        DIDConfig storage config = configs[identity];\n        address controller = address(0);\n        if( config.automaticRotation ){\n            uint currentController = block.timestamp.div( config.keyRotationTime ).mod( len );\n            controller = controllers[identity][currentController];\n        } else {\n            if( config.currentController >= len ){\n                controller = controllers[identity][0];\n            } else {\n                controller = controllers[identity][config.currentController];\n            }\n        }\n        if (controller != address(0)) return controller;\n        return identity;\n    }\n\n    function checkSignature(address identity, uint8 sigV, bytes32 sigR, bytes32 sigS, bytes32 hash) internal returns (address) {\n        address signer = ecrecover(hash, sigV, sigR, sigS);\n        require(signer == identityController(identity));\n        nonce[signer]++;\n        return signer;\n    }\n\n    function setCurrentController(address identity, uint index) internal {\n        DIDConfig storage config = configs[identity];\n        config.currentController = index;\n    }\n\n    function _getControllerIndex(address identity, address controller) internal view returns (int) {\n        for (uint i = 0; i < controllers[identity].length; i++) {\n            if (controllers[identity][i] == controller) {\n                return int(i);\n            }\n        }\n        return - 1;\n    }\n\n    function addController(address identity, address actor, address newController) internal onlyController(identity, actor) {\n        int controllerIndex = _getControllerIndex(identity, newController);\n\n        if (controllerIndex < 0) {\n            if( controllers[identity].length == 0 ){\n                controllers[identity].push( identity );\n            }\n            controllers[identity].push( newController );\n        }\n    }\n\n    function removeController(address identity, address actor, address controller) internal onlyController(identity, actor) {\n        require( controllers[identity].length > 1, 'You need at least two controllers to delete' );\n        require( identityController(identity) != controller , 'You cannot delete current controller' );\n        int controllerIndex = _getControllerIndex(identity, controller);\n\n        require( controllerIndex >= 0, 'Controller not exist' );\n\n        uint len = controllers[identity].length;\n        address lastController = controllers[identity][len - 1];\n        controllers[identity][uint(controllerIndex)] = lastController;\n        if( lastController == identityController(identity) ){\n            configs[identity].currentController = uint(controllerIndex);\n        }\n        delete controllers[identity][len - 1];\n        controllers[identity].pop();\n    }\n\n    function changeController(address identity, address actor, address newController) internal onlyController(identity, actor) {\n        int controllerIndex = _getControllerIndex(identity, newController);\n\n        require( controllerIndex >= 0, 'Controller not exist' );\n\n        if (controllerIndex >= 0) {\n            setCurrentController(identity, uint(controllerIndex));\n\n            emit DIDControllerChanged(identity, newController, changed[identity]);\n            changed[identity] = block.number;\n        }\n    }\n\n    function enableKeyRotation(address identity, address actor, uint keyRotationTime) internal onlyController(identity, actor) {\n        require( keyRotationTime >= minKeyRotationTime, 'Invalid minimum key rotation time' );\n        configs[identity].automaticRotation = true;\n        configs[identity].keyRotationTime = keyRotationTime;\n    }\n\n    function disableKeyRotation(address identity, address actor) internal onlyController(identity, actor) {\n        configs[identity].automaticRotation = false;\n    }\n\n    function addController(address identity, address controller) external override {\n        addController(identity, msg.sender, controller);\n    }\n\n    function removeController(address identity, address controller) external override {\n        removeController(identity, msg.sender, controller);\n    }\n\n    function changeController(address identity, address newController) external override {\n        changeController(identity, msg.sender, newController);\n    }\n\n    function changeControllerSigned(address identity, uint8 sigV, bytes32 sigR, bytes32 sigS, address newController) external override {\n        bytes32 hash = keccak256(abi.encodePacked(byte(0x19), byte(0), this, nonce[identityController(identity)], identity, \"changeController\", newController));\n        changeController(identity, checkSignature(identity, sigV, sigR, sigS, hash), newController);\n    }\n\n    function setAttribute(address identity, address actor, bytes memory name, bytes memory value, uint validity) internal onlyController(identity, actor) {\n        emit DIDAttributeChanged(identity, name, value, block.timestamp + validity, changed[identity]);\n        changed[identity] = block.number;\n    }\n\n    function setAttribute(address identity, bytes memory name, bytes memory value, uint validity) external override {\n        setAttribute(identity, msg.sender, name, value, validity);\n    }\n\n    function setAttributeSigned(address identity, uint8 sigV, bytes32 sigR, bytes32 sigS, bytes memory name, bytes memory value, uint validity) external override {\n        bytes32 hash = keccak256(abi.encodePacked(byte(0x19), byte(0), this, nonce[identityController(identity)], identity, \"setAttribute\", name, value, validity));\n        setAttribute(identity, checkSignature(identity, sigV, sigR, sigS, hash), name, value, validity);\n    }\n\n    function revokeAttribute(address identity, address actor, bytes memory name, bytes memory value) internal onlyController(identity, actor) {\n        emit DIDAttributeChanged(identity, name, value, 0, changed[identity]);\n        changed[identity] = block.number;\n    }\n\n    function revokeAttribute(address identity, bytes memory name, bytes memory value) external override {\n        revokeAttribute(identity, msg.sender, name, value);\n    }\n\n    function revokeAttributeSigned(address identity, uint8 sigV, bytes32 sigR, bytes32 sigS, bytes memory name, bytes memory value) external override {\n        bytes32 hash = keccak256(abi.encodePacked(byte(0x19), byte(0), this, nonce[identityController(identity)], identity, \"revokeAttribute\", name, value));\n        revokeAttribute(identity, checkSignature(identity, sigV, sigR, sigS, hash), name, value);\n    }\n\n    function enableKeyRotation(address identity, uint keyRotationTime) external override {\n        enableKeyRotation(identity, msg.sender, keyRotationTime);\n    }\n\n    function disableKeyRotation(address identity) external override {\n        disableKeyRotation(identity, msg.sender);\n    }\n\n}",
	"sourcePath": "contracts/DIDRegistry.sol",
	"sourceMap": "127:7638:0:-:0;;;436:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;514:19;493:18;:40;;;;436:104;127:7638;;;;;;",
	"deployedSourceMap": "127:7638:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4804:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7641:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4953:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5108:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5269:400;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;354:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6889:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7477:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;204:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;683:112;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6176:435;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5984:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7062:409;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;309:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;801:851;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4804:143;4893:47;4907:8;4917:10;4929;4893:13;:47::i;:::-;4804:143;;:::o;7641:121::-;7715:40;7734:8;7744:10;7715:18;:40::i;:::-;7641:121;:::o;4953:149::-;5045:50;5062:8;5072:10;5084;5045:16;:50::i;:::-;4953:149;;:::o;5108:155::-;5203:53;5220:8;5230:10;5242:13;5203:16;:53::i;:::-;5108:155;;:::o;5269:400::-;5410:12;5457:4;5452:10;;5469:1;5464:7;;5473:4;5479:5;:35;5485:28;5504:8;5485:18;:28::i;:::-;5479:35;;;;;;;;;;;;;;;;5516:8;5546:13;5435:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5425:136;;;;;;5410:151;;5571:91;5588:8;5598:48;5613:8;5623:4;5629;5635;5641;5598:14;:48::i;:::-;5648:13;5571:16;:91::i;:::-;5269:400;;;;;;:::o;354:37::-;;;;;;;;;;;;;;;;;:::o;6889:167::-;6999:50;7015:8;7025:10;7037:4;7043:5;6999:15;:50::i;:::-;6889:167;;;:::o;7477:158::-;7572:56;7590:8;7600:10;7612:15;7572:17;:56::i;:::-;7477:158;;:::o;204:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;683:112::-;730:16;765:11;:23;777:10;765:23;;;;;;;;;;;;;;;758:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;683:112;:::o;6176:435::-;6344:12;6391:4;6386:10;;6403:1;6398:7;;6407:4;6413:5;:35;6419:28;6438:8;6419:18;:28::i;:::-;6413:35;;;;;;;;;;;;;;;;6450:8;6476:4;6482:5;6489:8;6369:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6359:140;;;;;;6344:155;;6509:95;6522:8;6532:48;6547:8;6557:4;6563;6569;6575;6532:14;:48::i;:::-;6582:4;6588:5;6595:8;6509:12;:95::i;:::-;6176:435;;;;;;;;:::o;5984:186::-;6106:57;6119:8;6129:10;6141:4;6147:5;6154:8;6106:12;:57::i;:::-;5984:186;;;;:::o;7062:409::-;7218:12;7265:4;7260:10;;7277:1;7272:7;;7281:4;7287:5;:35;7293:28;7312:8;7293:18;:28::i;:::-;7287:35;;;;;;;;;;;;;;;;7324:8;7353:4;7359:5;7243:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7233:133;;;;;;7218:148;;7376:88;7392:8;7402:48;7417:8;7427:4;7433;7439;7445;7402:14;:48::i;:::-;7452:4;7458:5;7376:15;:88::i;:::-;7062:409;;;;;;;:::o;309:39::-;;;;;;;;;;;;;;;;;:::o;801:851::-;868:7;887:8;898:11;:21;910:8;898:21;;;;;;;;;;;;;;;:28;;;;887:39;;947:1;940:3;:8;936:29;;;957:8;950:15;;;;;936:29;986:1;979:3;:8;975:45;;;996:11;:21;1008:8;996:21;;;;;;;;;;;;;;;1018:1;996:24;;;;;;;;;;;;;;;;;;;;;;;;;989:31;;;;;975:45;1030:24;1057:7;:17;1065:8;1057:17;;;;;;;;;;;;;;;1030:44;;1084:18;1129:6;:24;;;;;;;;;;;;1125:439;;;1169:22;1194:56;1245:3;1194:45;1215:6;:22;;;1194:15;:19;;:45;;;;:::i;:::-;:49;;:56;;;;:::i;:::-;1169:81;;1277:11;:21;1289:8;1277:21;;;;;;;;;;;;;;;1299:17;1277:40;;;;;;;;;;;;;;;;;;;;;;;;;1264:53;;1125:439;;;;1380:3;1352:6;:24;;;:31;1348:206;;1416:11;:21;1428:8;1416:21;;;;;;;;;;;;;;;1438:1;1416:24;;;;;;;;;;;;;;;;;;;;;;;;;1403:37;;1348:206;;;1492:11;:21;1504:8;1492:21;;;;;;;;;;;;;;;1514:6;:24;;;1492:47;;;;;;;;;;;;;;;;;;;;;;;;;1479:60;;1348:206;1125:439;1599:1;1577:24;;:10;:24;;;1573:47;;1610:10;1603:17;;;;;;;1573:47;1637:8;1630:15;;;;;801:851;;;;:::o;2444:429::-;2547:8;2557:5;630:28;649:8;630:18;:28::i;:::-;621:37;;:5;:37;;;613:46;;;;;;2574:19:::1;2596:44;2616:8;2626:13;2596:19;:44::i;:::-;2574:66;;2673:1;2655:15;:19;2651:216;;;2726:1;2694:11:::0;:21:::1;2706:8;2694:21;;;;;;;;;;;;;;;:28;;;;:33;2690:110;;;2747:11;:21:::0;2759:8:::1;2747:21;;;;;;;;;;;;;;;2775:8;2747:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2690:110;2813:11;:21:::0;2825:8:::1;2813:21;;;;;;;;;;;;;;;2841:13;2813:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2651:216;669:1;2444:429:::0;;;;;:::o;4636:162::-;4721:8;4731:5;630:28;649:8;630:18;:28::i;:::-;621:37;;:5;:37;;;613:46;;;;;;4786:5:::1;4748:7;:17;4756:8;4748:17;;;;;;;;;;;;;;;:35;;;:43;;;;;;;;;;;;;;;;;;4636:162:::0;;;;:::o;2879:885::-;2982:8;2992:5;630:28;649:8;630:18;:28::i;:::-;621:37;;:5;:37;;;613:46;;;;;;3049:1:::1;3018:11;:21:::0;3030:8:::1;3018:21;;;;;;;;;;;;;;;:28;;;;:32;3009:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3150:10;3118:42;;:28;3137:8;3118:18;:28::i;:::-;:42;;;;3109:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3213:19;3235:41;3255:8;3265:10;3235:19;:41::i;:::-;3213:63;;3315:1;3296:15;:20;;3287:55;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3353:8;3364:11:::0;:21:::1;3376:8;3364:21;;;;;;;;;;;;;;;:28;;;;3353:39;;3402:22;3427:11:::0;:21:::1;3439:8;3427:21;;;;;;;;;;;;;;;3455:1;3449:3;:7;3427:30;;;;;;;;;;;;;;;;;;;;;;;;;3402:55;;3514:14;3467:11;:21:::0;3479:8:::1;3467:21;;;;;;;;;;;;;;;3494:15;3467:44;;;;;;;;;;;;;;;;:61;;;;;;;;;;;;;;;;;;3560:28;3579:8;3560:18;:28::i;:::-;3542:46;;:14;:46;;;3538:136;;;3647:15;3604:7;:17;3612:8;3604:17;;;;;;;;;;;;;;;:35;;:59;;;;3538:136;3690:11;:21:::0;3702:8:::1;3690:21;;;;;;;;;;;;;;;3718:1;3712:3;:7;3690:30;;;;;;;;;;;;;;;;3683:37;;;;;;;;;;;3730:11;:21:::0;3742:8:::1;3730:21;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;669:1;;;2879:885:::0;;;;;:::o;3770:516::-;3876:8;3886:5;630:28;649:8;630:18;:28::i;:::-;621:37;;:5;:37;;;613:46;;;;;;3903:19:::1;3925:44;3945:8;3955:13;3925:19;:44::i;:::-;3903:66;;4008:1;3989:15;:20;;3980:55;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;4069:1;4050:15;:20;4046:234;;4086:53;4107:8;4122:15;4086:20;:53::i;:::-;4180:8;4159:64;;;4190:13;4205:7;:17;4213:8;4205:17;;;;;;;;;;;;;;;;4159:64;;;;;;;;;;;;;;;;;;;;;;;;;;4257:12;4237:7;:17;4245:8;4237:17;;;;;;;;;;;;;;;:32;;;;4046:234;669:1;3770:516:::0;;;;;:::o;1658:295::-;1772:7;1791:14;1808:33;1818:4;1824;1830;1836;1808:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1791:50;;1869:28;1888:8;1869:18;:28::i;:::-;1859:38;;:6;:38;;;1851:47;;;;;;1908:5;:13;1914:6;1908:13;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;;1940:6;1933:13;;;1658:295;;;;;;;:::o;6617:266::-;6738:8;6748:5;630:28;649:8;630:18;:28::i;:::-;621:37;;:5;:37;;;613:46;;;;;;6790:8:::1;6770:64;;;6800:4;6806:5;6813:1;6816:7;:17;6824:8;6816:17;;;;;;;;;;;;;;;;6770:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6864:12;6844:7;:17;6852:8;6844:17;;;;;;;;;;;;;;;:32;;;;6617:266:::0;;;;;;:::o;4292:338::-;4398:8;4408:5;630:28;649:8;630:18;:28::i;:::-;621:37;;:5;:37;;;613:46;;;;;;4453:18:::1;;4434:15;:37;;4425:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4558:4;4520:7:::0;:17:::1;4528:8;4520:17;;;;;;;;;;;;;;;:35;;;:42;;;;;;;;;;;;;;;;;;4608:15;4572:7;:17;4580:8;4572:17;;;;;;;;;;;;;;;:33;;:51;;;;4292:338:::0;;;;;:::o;5675:303::-;5808:8;5818:5;630:28;649:8;630:18;:28::i;:::-;621:37;;:5;:37;;;613:46;;;;;;5860:8:::1;5840:89;;;5870:4;5876:5;5901:8;5883:15;:26;5911:7;:17;5919:8;5911:17;;;;;;;;;;;;;;;;5840:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5959:12;5939:7;:17;5947:8;5939:17;;;;;;;;;;;;;;;:32;;;;5675:303:::0;;;;;;;:::o;3109:130:4:-;3167:7;3193:39;3197:1;3200;3193:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3186:46;;3109:130;;;;:::o;4444:128::-;4502:7;4528:37;4532:1;4535;4528:37;;;;;;;;;;;;;;;;;:3;:37::i;:::-;4521:44;;4444:128;;;;:::o;2137:301:0:-;2227:3;2247:6;2256:1;2247:10;;2242:170;2263:11;:21;2275:8;2263:21;;;;;;;;;;;;;;;:28;;;;2259:1;:32;2242:170;;;2344:10;2316:38;;:11;:21;2328:8;2316:21;;;;;;;;;;;;;;;2338:1;2316:24;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;2312:90;;;2385:1;2374:13;;;;;2312:90;2293:3;;;;;;;2242:170;;;;2428:3;2421:10;;2137:301;;;;;:::o;1959:172::-;2038:24;2065:7;:17;2073:8;2065:17;;;;;;;;;;;;;;;2038:44;;2119:5;2092:6;:24;;:32;;;;1959:172;;;:::o;3721:272:4:-;3807:7;3838:1;3834;:5;3841:12;3826:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3864:9;3880:1;3876;:5;;;;;;3864:17;;3985:1;3978:8;;;3721:272;;;;;:::o;5043:163::-;5129:7;5161:1;5156;:6;;5164:12;5148:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5198:1;5194;:5;;;;;;5187:12;;5043:163;;;;;:::o",
	"abi": [
		{
			"inputs": [
				{
					"internalType": "uint256",
					"name": "_minKeyRotationTime",
					"type": "uint256"
				}
			],
			"stateMutability": "nonpayable",
			"type": "constructor"
		},
		{
			"anonymous": false,
			"inputs": [
				{
					"indexed": true,
					"internalType": "address",
					"name": "identity",
					"type": "address"
				},
				{
					"indexed": false,
					"internalType": "bytes",
					"name": "name",
					"type": "bytes"
				},
				{
					"indexed": false,
					"internalType": "bytes",
					"name": "value",
					"type": "bytes"
				},
				{
					"indexed": false,
					"internalType": "uint256",
					"name": "validTo",
					"type": "uint256"
				},
				{
					"indexed": false,
					"internalType": "uint256",
					"name": "previousChange",
					"type": "uint256"
				}
			],
			"name": "DIDAttributeChanged",
			"type": "event"
		},
		{
			"anonymous": false,
			"inputs": [
				{
					"indexed": true,
					"internalType": "address",
					"name": "identity",
					"type": "address"
				},
				{
					"indexed": false,
					"internalType": "address",
					"name": "controller",
					"type": "address"
				},
				{
					"indexed": false,
					"internalType": "uint256",
					"name": "previousChange",
					"type": "uint256"
				}
			],
			"name": "DIDControllerChanged",
			"type": "event"
		},
		{
			"inputs": [
				{
					"internalType": "address",
					"name": "identity",
					"type": "address"
				},
				{
					"internalType": "address",
					"name": "controller",
					"type": "address"
				}
			],
			"name": "addController",
			"outputs": [],
			"stateMutability": "nonpayable",
			"type": "function"
		},
		{
			"inputs": [
				{
					"internalType": "address",
					"name": "identity",
					"type": "address"
				},
				{
					"internalType": "address",
					"name": "newController",
					"type": "address"
				}
			],
			"name": "changeController",
			"outputs": [],
			"stateMutability": "nonpayable",
			"type": "function"
		},
		{
			"inputs": [
				{
					"internalType": "address",
					"name": "identity",
					"type": "address"
				},
				{
					"internalType": "uint8",
					"name": "sigV",
					"type": "uint8"
				},
				{
					"internalType": "bytes32",
					"name": "sigR",
					"type": "bytes32"
				},
				{
					"internalType": "bytes32",
					"name": "sigS",
					"type": "bytes32"
				},
				{
					"internalType": "address",
					"name": "newController",
					"type": "address"
				}
			],
			"name": "changeControllerSigned",
			"outputs": [],
			"stateMutability": "nonpayable",
			"type": "function"
		},
		{
			"inputs": [
				{
					"internalType": "address",
					"name": "",
					"type": "address"
				}
			],
			"name": "changed",
			"outputs": [
				{
					"internalType": "uint256",
					"name": "",
					"type": "uint256"
				}
			],
			"stateMutability": "view",
			"type": "function"
		},
		{
			"inputs": [
				{
					"internalType": "address",
					"name": "",
					"type": "address"
				},
				{
					"internalType": "uint256",
					"name": "",
					"type": "uint256"
				}
			],
			"name": "controllers",
			"outputs": [
				{
					"internalType": "address",
					"name": "",
					"type": "address"
				}
			],
			"stateMutability": "view",
			"type": "function"
		},
		{
			"inputs": [
				{
					"internalType": "address",
					"name": "identity",
					"type": "address"
				}
			],
			"name": "disableKeyRotation",
			"outputs": [],
			"stateMutability": "nonpayable",
			"type": "function"
		},
		{
			"inputs": [
				{
					"internalType": "address",
					"name": "identity",
					"type": "address"
				},
				{
					"internalType": "uint256",
					"name": "keyRotationTime",
					"type": "uint256"
				}
			],
			"name": "enableKeyRotation",
			"outputs": [],
			"stateMutability": "nonpayable",
			"type": "function"
		},
		{
			"inputs": [],
			"name": "getControllers",
			"outputs": [
				{
					"internalType": "address[]",
					"name": "",
					"type": "address[]"
				}
			],
			"stateMutability": "view",
			"type": "function"
		},
		{
			"inputs": [
				{
					"internalType": "address",
					"name": "identity",
					"type": "address"
				}
			],
			"name": "identityController",
			"outputs": [
				{
					"internalType": "address",
					"name": "",
					"type": "address"
				}
			],
			"stateMutability": "view",
			"type": "function"
		},
		{
			"inputs": [
				{
					"internalType": "address",
					"name": "",
					"type": "address"
				}
			],
			"name": "nonce",
			"outputs": [
				{
					"internalType": "uint256",
					"name": "",
					"type": "uint256"
				}
			],
			"stateMutability": "view",
			"type": "function"
		},
		{
			"inputs": [
				{
					"internalType": "address",
					"name": "identity",
					"type": "address"
				},
				{
					"internalType": "address",
					"name": "controller",
					"type": "address"
				}
			],
			"name": "removeController",
			"outputs": [],
			"stateMutability": "nonpayable",
			"type": "function"
		},
		{
			"inputs": [
				{
					"internalType": "address",
					"name": "identity",
					"type": "address"
				},
				{
					"internalType": "bytes",
					"name": "name",
					"type": "bytes"
				},
				{
					"internalType": "bytes",
					"name": "value",
					"type": "bytes"
				}
			],
			"name": "revokeAttribute",
			"outputs": [],
			"stateMutability": "nonpayable",
			"type": "function"
		},
		{
			"inputs": [
				{
					"internalType": "address",
					"name": "identity",
					"type": "address"
				},
				{
					"internalType": "uint8",
					"name": "sigV",
					"type": "uint8"
				},
				{
					"internalType": "bytes32",
					"name": "sigR",
					"type": "bytes32"
				},
				{
					"internalType": "bytes32",
					"name": "sigS",
					"type": "bytes32"
				},
				{
					"internalType": "bytes",
					"name": "name",
					"type": "bytes"
				},
				{
					"internalType": "bytes",
					"name": "value",
					"type": "bytes"
				}
			],
			"name": "revokeAttributeSigned",
			"outputs": [],
			"stateMutability": "nonpayable",
			"type": "function"
		},
		{
			"inputs": [
				{
					"internalType": "address",
					"name": "identity",
					"type": "address"
				},
				{
					"internalType": "bytes",
					"name": "name",
					"type": "bytes"
				},
				{
					"internalType": "bytes",
					"name": "value",
					"type": "bytes"
				},
				{
					"internalType": "uint256",
					"name": "validity",
					"type": "uint256"
				}
			],
			"name": "setAttribute",
			"outputs": [],
			"stateMutability": "nonpayable",
			"type": "function"
		},
		{
			"inputs": [
				{
					"internalType": "address",
					"name": "identity",
					"type": "address"
				},
				{
					"internalType": "uint8",
					"name": "sigV",
					"type": "uint8"
				},
				{
					"internalType": "bytes32",
					"name": "sigR",
					"type": "bytes32"
				},
				{
					"internalType": "bytes32",
					"name": "sigS",
					"type": "bytes32"
				},
				{
					"internalType": "bytes",
					"name": "name",
					"type": "bytes"
				},
				{
					"internalType": "bytes",
					"name": "value",
					"type": "bytes"
				},
				{
					"internalType": "uint256",
					"name": "validity",
					"type": "uint256"
				}
			],
			"name": "setAttributeSigned",
			"outputs": [],
			"stateMutability": "nonpayable",
			"type": "function"
		}
	],
	"ast": {
		"absolutePath": "contracts/DIDRegistry.sol",
		"exportedSymbols": {
			"DIDRegistry": [
				894
			]
		},
		"id": 895,
		"license": "UNLICENSED",
		"nodeType": "SourceUnit",
		"nodes": [
			{
				"id": 1,
				"literals": [
					"solidity",
					">=",
					"0.6",
					".0",
					"<",
					"0.7",
					".0"
				],
				"nodeType": "PragmaDirective",
				"src": "39:31:0"
			},
			{
				"absolutePath": "contracts/SafeMath.sol",
				"file": "./SafeMath.sol",
				"id": 2,
				"nodeType": "ImportDirective",
				"scope": 895,
				"sourceUnit": 1539,
				"src": "72:24:0",
				"symbolAliases": [],
				"unitAlias": ""
			},
			{
				"absolutePath": "contracts/IDIDRegistry.sol",
				"file": "./IDIDRegistry.sol",
				"id": 3,
				"nodeType": "ImportDirective",
				"scope": 895,
				"sourceUnit": 1290,
				"src": "97:28:0",
				"symbolAliases": [],
				"unitAlias": ""
			},
			{
				"abstract": false,
				"baseContracts": [
					{
						"arguments": null,
						"baseName": {
							"contractScope": null,
							"id": 4,
							"name": "IDIDRegistry",
							"nodeType": "UserDefinedTypeName",
							"referencedDeclaration": 1289,
							"src": "151:12:0",
							"typeDescriptions": {
								"typeIdentifier": "t_contract$_IDIDRegistry_$1289",
								"typeString": "contract IDIDRegistry"
							}
						},
						"id": 5,
						"nodeType": "InheritanceSpecifier",
						"src": "151:12:0"
					}
				],
				"contractDependencies": [
					1289
				],
				"contractKind": "contract",
				"documentation": null,
				"fullyImplemented": true,
				"id": 894,
				"linearizedBaseContracts": [
					894,
					1289
				],
				"name": "DIDRegistry",
				"nodeType": "ContractDefinition",
				"nodes": [
					{
						"id": 8,
						"libraryName": {
							"contractScope": null,
							"id": 6,
							"name": "SafeMath",
							"nodeType": "UserDefinedTypeName",
							"referencedDeclaration": 1538,
							"src": "177:8:0",
							"typeDescriptions": {
								"typeIdentifier": "t_contract$_SafeMath_$1538",
								"typeString": "library SafeMath"
							}
						},
						"nodeType": "UsingForDirective",
						"src": "171:27:0",
						"typeName": {
							"id": 7,
							"name": "uint256",
							"nodeType": "ElementaryTypeName",
							"src": "190:7:0",
							"typeDescriptions": {
								"typeIdentifier": "t_uint256",
								"typeString": "uint256"
							}
						}
					},
					{
						"constant": false,
						"functionSelector": "9478c0d1",
						"id": 13,
						"mutability": "mutable",
						"name": "controllers",
						"nodeType": "VariableDeclaration",
						"overrides": null,
						"scope": 894,
						"src": "204:48:0",
						"stateVariable": true,
						"storageLocation": "default",
						"typeDescriptions": {
							"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$",
							"typeString": "mapping(address => address[])"
						},
						"typeName": {
							"id": 12,
							"keyType": {
								"id": 9,
								"name": "address",
								"nodeType": "ElementaryTypeName",
								"src": "212:7:0",
								"typeDescriptions": {
									"typeIdentifier": "t_address",
									"typeString": "address"
								}
							},
							"nodeType": "Mapping",
							"src": "204:29:0",
							"typeDescriptions": {
								"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$",
								"typeString": "mapping(address => address[])"
							},
							"valueType": {
								"baseType": {
									"id": 10,
									"name": "address",
									"nodeType": "ElementaryTypeName",
									"src": "223:7:0",
									"stateMutability": "nonpayable",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									}
								},
								"id": 11,
								"length": null,
								"nodeType": "ArrayTypeName",
								"src": "223:9:0",
								"typeDescriptions": {
									"typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
									"typeString": "address[]"
								}
							}
						},
						"value": null,
						"visibility": "public"
					},
					{
						"constant": false,
						"id": 17,
						"mutability": "mutable",
						"name": "configs",
						"nodeType": "VariableDeclaration",
						"overrides": null,
						"scope": 894,
						"src": "258:45:0",
						"stateVariable": true,
						"storageLocation": "default",
						"typeDescriptions": {
							"typeIdentifier": "t_mapping$_t_address_$_t_struct$_DIDConfig_$1170_storage_$",
							"typeString": "mapping(address => struct IDIDRegistry.DIDConfig)"
						},
						"typeName": {
							"id": 16,
							"keyType": {
								"id": 14,
								"name": "address",
								"nodeType": "ElementaryTypeName",
								"src": "266:7:0",
								"typeDescriptions": {
									"typeIdentifier": "t_address",
									"typeString": "address"
								}
							},
							"nodeType": "Mapping",
							"src": "258:29:0",
							"typeDescriptions": {
								"typeIdentifier": "t_mapping$_t_address_$_t_struct$_DIDConfig_$1170_storage_$",
								"typeString": "mapping(address => struct IDIDRegistry.DIDConfig)"
							},
							"valueType": {
								"contractScope": null,
								"id": 15,
								"name": "DIDConfig",
								"nodeType": "UserDefinedTypeName",
								"referencedDeclaration": 1170,
								"src": "277:9:0",
								"typeDescriptions": {
									"typeIdentifier": "t_struct$_DIDConfig_$1170_storage_ptr",
									"typeString": "struct IDIDRegistry.DIDConfig"
								}
							}
						},
						"value": null,
						"visibility": "private"
					},
					{
						"constant": false,
						"functionSelector": "f96d0f9f",
						"id": 21,
						"mutability": "mutable",
						"name": "changed",
						"nodeType": "VariableDeclaration",
						"overrides": null,
						"scope": 894,
						"src": "309:39:0",
						"stateVariable": true,
						"storageLocation": "default",
						"typeDescriptions": {
							"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
							"typeString": "mapping(address => uint256)"
						},
						"typeName": {
							"id": 20,
							"keyType": {
								"id": 18,
								"name": "address",
								"nodeType": "ElementaryTypeName",
								"src": "317:7:0",
								"typeDescriptions": {
									"typeIdentifier": "t_address",
									"typeString": "address"
								}
							},
							"nodeType": "Mapping",
							"src": "309:24:0",
							"typeDescriptions": {
								"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
								"typeString": "mapping(address => uint256)"
							},
							"valueType": {
								"id": 19,
								"name": "uint",
								"nodeType": "ElementaryTypeName",
								"src": "328:4:0",
								"typeDescriptions": {
									"typeIdentifier": "t_uint256",
									"typeString": "uint256"
								}
							}
						},
						"value": null,
						"visibility": "public"
					},
					{
						"constant": false,
						"functionSelector": "70ae92d2",
						"id": 25,
						"mutability": "mutable",
						"name": "nonce",
						"nodeType": "VariableDeclaration",
						"overrides": null,
						"scope": 894,
						"src": "354:37:0",
						"stateVariable": true,
						"storageLocation": "default",
						"typeDescriptions": {
							"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
							"typeString": "mapping(address => uint256)"
						},
						"typeName": {
							"id": 24,
							"keyType": {
								"id": 22,
								"name": "address",
								"nodeType": "ElementaryTypeName",
								"src": "362:7:0",
								"typeDescriptions": {
									"typeIdentifier": "t_address",
									"typeString": "address"
								}
							},
							"nodeType": "Mapping",
							"src": "354:24:0",
							"typeDescriptions": {
								"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
								"typeString": "mapping(address => uint256)"
							},
							"valueType": {
								"id": 23,
								"name": "uint",
								"nodeType": "ElementaryTypeName",
								"src": "373:4:0",
								"typeDescriptions": {
									"typeIdentifier": "t_uint256",
									"typeString": "uint256"
								}
							}
						},
						"value": null,
						"visibility": "public"
					},
					{
						"constant": false,
						"id": 27,
						"mutability": "mutable",
						"name": "minKeyRotationTime",
						"nodeType": "VariableDeclaration",
						"overrides": null,
						"scope": 894,
						"src": "398:31:0",
						"stateVariable": true,
						"storageLocation": "default",
						"typeDescriptions": {
							"typeIdentifier": "t_uint256",
							"typeString": "uint256"
						},
						"typeName": {
							"id": 26,
							"name": "uint",
							"nodeType": "ElementaryTypeName",
							"src": "398:4:0",
							"typeDescriptions": {
								"typeIdentifier": "t_uint256",
								"typeString": "uint256"
							}
						},
						"value": null,
						"visibility": "private"
					},
					{
						"body": {
							"id": 36,
							"nodeType": "Block",
							"src": "483:57:0",
							"statements": [
								{
									"expression": {
										"argumentTypes": null,
										"id": 34,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"lValueRequested": false,
										"leftHandSide": {
											"argumentTypes": null,
											"id": 32,
											"name": "minKeyRotationTime",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 27,
											"src": "493:18:0",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											}
										},
										"nodeType": "Assignment",
										"operator": "=",
										"rightHandSide": {
											"argumentTypes": null,
											"id": 33,
											"name": "_minKeyRotationTime",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 29,
											"src": "514:19:0",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											}
										},
										"src": "493:40:0",
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									},
									"id": 35,
									"nodeType": "ExpressionStatement",
									"src": "493:40:0"
								}
							]
						},
						"documentation": null,
						"id": 37,
						"implemented": true,
						"kind": "constructor",
						"modifiers": [],
						"name": "",
						"nodeType": "FunctionDefinition",
						"overrides": null,
						"parameters": {
							"id": 30,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 29,
									"mutability": "mutable",
									"name": "_minKeyRotationTime",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 37,
									"src": "449:24:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_uint256",
										"typeString": "uint256"
									},
									"typeName": {
										"id": 28,
										"name": "uint",
										"nodeType": "ElementaryTypeName",
										"src": "449:4:0",
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "447:28:0"
						},
						"returnParameters": {
							"id": 31,
							"nodeType": "ParameterList",
							"parameters": [],
							"src": "483:0:0"
						},
						"scope": 894,
						"src": "436:104:0",
						"stateMutability": "nonpayable",
						"virtual": false,
						"visibility": "public"
					},
					{
						"body": {
							"id": 52,
							"nodeType": "Block",
							"src": "603:74:0",
							"statements": [
								{
									"expression": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"commonType": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"id": 48,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"lValueRequested": false,
												"leftExpression": {
													"argumentTypes": null,
													"id": 44,
													"name": "actor",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 41,
													"src": "621:5:0",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"nodeType": "BinaryOperation",
												"operator": "==",
												"rightExpression": {
													"argumentTypes": null,
													"arguments": [
														{
															"argumentTypes": null,
															"id": 46,
															"name": "identity",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 39,
															"src": "649:8:0",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"id": 45,
														"name": "identityController",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 169,
														"src": "630:18:0",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
															"typeString": "function (address) view returns (address)"
														}
													},
													"id": 47,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "630:28:0",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"src": "621:37:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												}
											],
											"id": 43,
											"name": "require",
											"nodeType": "Identifier",
											"overloadedDeclarations": [
												-18,
												-18
											],
											"referencedDeclaration": -18,
											"src": "613:7:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
												"typeString": "function (bool) pure"
											}
										},
										"id": 49,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "613:46:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 50,
									"nodeType": "ExpressionStatement",
									"src": "613:46:0"
								},
								{
									"id": 51,
									"nodeType": "PlaceholderStatement",
									"src": "669:1:0"
								}
							]
						},
						"documentation": null,
						"id": 53,
						"name": "onlyController",
						"nodeType": "ModifierDefinition",
						"overrides": null,
						"parameters": {
							"id": 42,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 39,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 53,
									"src": "570:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 38,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "570:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 41,
									"mutability": "mutable",
									"name": "actor",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 53,
									"src": "588:13:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 40,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "588:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "569:33:0"
						},
						"src": "546:131:0",
						"virtual": false,
						"visibility": "internal"
					},
					{
						"body": {
							"id": 64,
							"nodeType": "Block",
							"src": "748:47:0",
							"statements": [
								{
									"expression": {
										"argumentTypes": null,
										"baseExpression": {
											"argumentTypes": null,
											"id": 59,
											"name": "controllers",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 13,
											"src": "765:11:0",
											"typeDescriptions": {
												"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$",
												"typeString": "mapping(address => address[] storage ref)"
											}
										},
										"id": 62,
										"indexExpression": {
											"argumentTypes": null,
											"expression": {
												"argumentTypes": null,
												"id": 60,
												"name": "msg",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": -15,
												"src": "777:3:0",
												"typeDescriptions": {
													"typeIdentifier": "t_magic_message",
													"typeString": "msg"
												}
											},
											"id": 61,
											"isConstant": false,
											"isLValue": false,
											"isPure": false,
											"lValueRequested": false,
											"memberName": "sender",
											"nodeType": "MemberAccess",
											"referencedDeclaration": null,
											"src": "777:10:0",
											"typeDescriptions": {
												"typeIdentifier": "t_address_payable",
												"typeString": "address payable"
											}
										},
										"isConstant": false,
										"isLValue": true,
										"isPure": false,
										"lValueRequested": false,
										"nodeType": "IndexAccess",
										"src": "765:23:0",
										"typeDescriptions": {
											"typeIdentifier": "t_array$_t_address_$dyn_storage",
											"typeString": "address[] storage ref"
										}
									},
									"functionReturnParameters": 58,
									"id": 63,
									"nodeType": "Return",
									"src": "758:30:0"
								}
							]
						},
						"documentation": null,
						"functionSelector": "b4e8a6c4",
						"id": 65,
						"implemented": true,
						"kind": "function",
						"modifiers": [],
						"name": "getControllers",
						"nodeType": "FunctionDefinition",
						"overrides": null,
						"parameters": {
							"id": 54,
							"nodeType": "ParameterList",
							"parameters": [],
							"src": "706:2:0"
						},
						"returnParameters": {
							"id": 58,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 57,
									"mutability": "mutable",
									"name": "",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 65,
									"src": "730:16:0",
									"stateVariable": false,
									"storageLocation": "memory",
									"typeDescriptions": {
										"typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
										"typeString": "address[]"
									},
									"typeName": {
										"baseType": {
											"id": 55,
											"name": "address",
											"nodeType": "ElementaryTypeName",
											"src": "730:7:0",
											"stateMutability": "nonpayable",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											}
										},
										"id": 56,
										"length": null,
										"nodeType": "ArrayTypeName",
										"src": "730:9:0",
										"typeDescriptions": {
											"typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
											"typeString": "address[]"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "729:18:0"
						},
						"scope": 894,
						"src": "683:112:0",
						"stateMutability": "view",
						"virtual": false,
						"visibility": "public"
					},
					{
						"body": {
							"id": 168,
							"nodeType": "Block",
							"src": "877:775:0",
							"statements": [
								{
									"assignments": [
										73
									],
									"declarations": [
										{
											"constant": false,
											"id": 73,
											"mutability": "mutable",
											"name": "len",
											"nodeType": "VariableDeclaration",
											"overrides": null,
											"scope": 168,
											"src": "887:8:0",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											},
											"typeName": {
												"id": 72,
												"name": "uint",
												"nodeType": "ElementaryTypeName",
												"src": "887:4:0",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											},
											"value": null,
											"visibility": "internal"
										}
									],
									"id": 78,
									"initialValue": {
										"argumentTypes": null,
										"expression": {
											"argumentTypes": null,
											"baseExpression": {
												"argumentTypes": null,
												"id": 74,
												"name": "controllers",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 13,
												"src": "898:11:0",
												"typeDescriptions": {
													"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$",
													"typeString": "mapping(address => address[] storage ref)"
												}
											},
											"id": 76,
											"indexExpression": {
												"argumentTypes": null,
												"id": 75,
												"name": "identity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 67,
												"src": "910:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											"isConstant": false,
											"isLValue": true,
											"isPure": false,
											"lValueRequested": false,
											"nodeType": "IndexAccess",
											"src": "898:21:0",
											"typeDescriptions": {
												"typeIdentifier": "t_array$_t_address_$dyn_storage",
												"typeString": "address[] storage ref"
											}
										},
										"id": 77,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"lValueRequested": false,
										"memberName": "length",
										"nodeType": "MemberAccess",
										"referencedDeclaration": null,
										"src": "898:28:0",
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									},
									"nodeType": "VariableDeclarationStatement",
									"src": "887:39:0"
								},
								{
									"condition": {
										"argumentTypes": null,
										"commonType": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										},
										"id": 81,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"lValueRequested": false,
										"leftExpression": {
											"argumentTypes": null,
											"id": 79,
											"name": "len",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 73,
											"src": "940:3:0",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											}
										},
										"nodeType": "BinaryOperation",
										"operator": "==",
										"rightExpression": {
											"argumentTypes": null,
											"hexValue": "30",
											"id": 80,
											"isConstant": false,
											"isLValue": false,
											"isPure": true,
											"kind": "number",
											"lValueRequested": false,
											"nodeType": "Literal",
											"src": "947:1:0",
											"subdenomination": null,
											"typeDescriptions": {
												"typeIdentifier": "t_rational_0_by_1",
												"typeString": "int_const 0"
											},
											"value": "0"
										},
										"src": "940:8:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bool",
											"typeString": "bool"
										}
									},
									"falseBody": null,
									"id": 84,
									"nodeType": "IfStatement",
									"src": "936:29:0",
									"trueBody": {
										"expression": {
											"argumentTypes": null,
											"id": 82,
											"name": "identity",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 67,
											"src": "957:8:0",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											}
										},
										"functionReturnParameters": 71,
										"id": 83,
										"nodeType": "Return",
										"src": "950:15:0"
									}
								},
								{
									"condition": {
										"argumentTypes": null,
										"commonType": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										},
										"id": 87,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"lValueRequested": false,
										"leftExpression": {
											"argumentTypes": null,
											"id": 85,
											"name": "len",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 73,
											"src": "979:3:0",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											}
										},
										"nodeType": "BinaryOperation",
										"operator": "==",
										"rightExpression": {
											"argumentTypes": null,
											"hexValue": "31",
											"id": 86,
											"isConstant": false,
											"isLValue": false,
											"isPure": true,
											"kind": "number",
											"lValueRequested": false,
											"nodeType": "Literal",
											"src": "986:1:0",
											"subdenomination": null,
											"typeDescriptions": {
												"typeIdentifier": "t_rational_1_by_1",
												"typeString": "int_const 1"
											},
											"value": "1"
										},
										"src": "979:8:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bool",
											"typeString": "bool"
										}
									},
									"falseBody": null,
									"id": 94,
									"nodeType": "IfStatement",
									"src": "975:45:0",
									"trueBody": {
										"expression": {
											"argumentTypes": null,
											"baseExpression": {
												"argumentTypes": null,
												"baseExpression": {
													"argumentTypes": null,
													"id": 88,
													"name": "controllers",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 13,
													"src": "996:11:0",
													"typeDescriptions": {
														"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$",
														"typeString": "mapping(address => address[] storage ref)"
													}
												},
												"id": 90,
												"indexExpression": {
													"argumentTypes": null,
													"id": 89,
													"name": "identity",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 67,
													"src": "1008:8:0",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"isConstant": false,
												"isLValue": true,
												"isPure": false,
												"lValueRequested": false,
												"nodeType": "IndexAccess",
												"src": "996:21:0",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_address_$dyn_storage",
													"typeString": "address[] storage ref"
												}
											},
											"id": 92,
											"indexExpression": {
												"argumentTypes": null,
												"hexValue": "30",
												"id": 91,
												"isConstant": false,
												"isLValue": false,
												"isPure": true,
												"kind": "number",
												"lValueRequested": false,
												"nodeType": "Literal",
												"src": "1018:1:0",
												"subdenomination": null,
												"typeDescriptions": {
													"typeIdentifier": "t_rational_0_by_1",
													"typeString": "int_const 0"
												},
												"value": "0"
											},
											"isConstant": false,
											"isLValue": true,
											"isPure": false,
											"lValueRequested": false,
											"nodeType": "IndexAccess",
											"src": "996:24:0",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											}
										},
										"functionReturnParameters": 71,
										"id": 93,
										"nodeType": "Return",
										"src": "989:31:0"
									}
								},
								{
									"assignments": [
										96
									],
									"declarations": [
										{
											"constant": false,
											"id": 96,
											"mutability": "mutable",
											"name": "config",
											"nodeType": "VariableDeclaration",
											"overrides": null,
											"scope": 168,
											"src": "1030:24:0",
											"stateVariable": false,
											"storageLocation": "storage",
											"typeDescriptions": {
												"typeIdentifier": "t_struct$_DIDConfig_$1170_storage_ptr",
												"typeString": "struct IDIDRegistry.DIDConfig"
											},
											"typeName": {
												"contractScope": null,
												"id": 95,
												"name": "DIDConfig",
												"nodeType": "UserDefinedTypeName",
												"referencedDeclaration": 1170,
												"src": "1030:9:0",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_DIDConfig_$1170_storage_ptr",
													"typeString": "struct IDIDRegistry.DIDConfig"
												}
											},
											"value": null,
											"visibility": "internal"
										}
									],
									"id": 100,
									"initialValue": {
										"argumentTypes": null,
										"baseExpression": {
											"argumentTypes": null,
											"id": 97,
											"name": "configs",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 17,
											"src": "1057:7:0",
											"typeDescriptions": {
												"typeIdentifier": "t_mapping$_t_address_$_t_struct$_DIDConfig_$1170_storage_$",
												"typeString": "mapping(address => struct IDIDRegistry.DIDConfig storage ref)"
											}
										},
										"id": 99,
										"indexExpression": {
											"argumentTypes": null,
											"id": 98,
											"name": "identity",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 67,
											"src": "1065:8:0",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											}
										},
										"isConstant": false,
										"isLValue": true,
										"isPure": false,
										"lValueRequested": false,
										"nodeType": "IndexAccess",
										"src": "1057:17:0",
										"typeDescriptions": {
											"typeIdentifier": "t_struct$_DIDConfig_$1170_storage",
											"typeString": "struct IDIDRegistry.DIDConfig storage ref"
										}
									},
									"nodeType": "VariableDeclarationStatement",
									"src": "1030:44:0"
								},
								{
									"assignments": [
										102
									],
									"declarations": [
										{
											"constant": false,
											"id": 102,
											"mutability": "mutable",
											"name": "controller",
											"nodeType": "VariableDeclaration",
											"overrides": null,
											"scope": 168,
											"src": "1084:18:0",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											},
											"typeName": {
												"id": 101,
												"name": "address",
												"nodeType": "ElementaryTypeName",
												"src": "1084:7:0",
												"stateMutability": "nonpayable",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											"value": null,
											"visibility": "internal"
										}
									],
									"id": 107,
									"initialValue": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"hexValue": "30",
												"id": 105,
												"isConstant": false,
												"isLValue": false,
												"isPure": true,
												"kind": "number",
												"lValueRequested": false,
												"nodeType": "Literal",
												"src": "1113:1:0",
												"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": 104,
											"isConstant": false,
											"isLValue": false,
											"isPure": true,
											"lValueRequested": false,
											"nodeType": "ElementaryTypeNameExpression",
											"src": "1105:7:0",
											"typeDescriptions": {
												"typeIdentifier": "t_type$_t_address_$",
												"typeString": "type(address)"
											},
											"typeName": {
												"id": 103,
												"name": "address",
												"nodeType": "ElementaryTypeName",
												"src": "1105:7:0",
												"typeDescriptions": {
													"typeIdentifier": null,
													"typeString": null
												}
											}
										},
										"id": 106,
										"isConstant": false,
										"isLValue": false,
										"isPure": true,
										"kind": "typeConversion",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "1105:10:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_address_payable",
											"typeString": "address payable"
										}
									},
									"nodeType": "VariableDeclarationStatement",
									"src": "1084:31:0"
								},
								{
									"condition": {
										"argumentTypes": null,
										"expression": {
											"argumentTypes": null,
											"id": 108,
											"name": "config",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 96,
											"src": "1129:6:0",
											"typeDescriptions": {
												"typeIdentifier": "t_struct$_DIDConfig_$1170_storage_ptr",
												"typeString": "struct IDIDRegistry.DIDConfig storage pointer"
											}
										},
										"id": 109,
										"isConstant": false,
										"isLValue": true,
										"isPure": false,
										"lValueRequested": false,
										"memberName": "automaticRotation",
										"nodeType": "MemberAccess",
										"referencedDeclaration": 1167,
										"src": "1129:24:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bool",
											"typeString": "bool"
										}
									},
									"falseBody": {
										"id": 155,
										"nodeType": "Block",
										"src": "1334:230:0",
										"statements": [
											{
												"condition": {
													"argumentTypes": null,
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 134,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"argumentTypes": null,
														"expression": {
															"argumentTypes": null,
															"id": 131,
															"name": "config",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 96,
															"src": "1352:6:0",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_DIDConfig_$1170_storage_ptr",
																"typeString": "struct IDIDRegistry.DIDConfig storage pointer"
															}
														},
														"id": 132,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "currentController",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 1165,
														"src": "1352:24:0",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": ">=",
													"rightExpression": {
														"argumentTypes": null,
														"id": 133,
														"name": "len",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 73,
														"src": "1380:3:0",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "1352:31:0",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"falseBody": {
													"id": 153,
													"nodeType": "Block",
													"src": "1461:93:0",
													"statements": [
														{
															"expression": {
																"argumentTypes": null,
																"id": 151,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftHandSide": {
																	"argumentTypes": null,
																	"id": 144,
																	"name": "controller",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 102,
																	"src": "1479:10:0",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"nodeType": "Assignment",
																"operator": "=",
																"rightHandSide": {
																	"argumentTypes": null,
																	"baseExpression": {
																		"argumentTypes": null,
																		"baseExpression": {
																			"argumentTypes": null,
																			"id": 145,
																			"name": "controllers",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 13,
																			"src": "1492:11:0",
																			"typeDescriptions": {
																				"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$",
																				"typeString": "mapping(address => address[] storage ref)"
																			}
																		},
																		"id": 147,
																		"indexExpression": {
																			"argumentTypes": null,
																			"id": 146,
																			"name": "identity",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 67,
																			"src": "1504:8:0",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"nodeType": "IndexAccess",
																		"src": "1492:21:0",
																		"typeDescriptions": {
																			"typeIdentifier": "t_array$_t_address_$dyn_storage",
																			"typeString": "address[] storage ref"
																		}
																	},
																	"id": 150,
																	"indexExpression": {
																		"argumentTypes": null,
																		"expression": {
																			"argumentTypes": null,
																			"id": 148,
																			"name": "config",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 96,
																			"src": "1514:6:0",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_DIDConfig_$1170_storage_ptr",
																				"typeString": "struct IDIDRegistry.DIDConfig storage pointer"
																			}
																		},
																		"id": 149,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "currentController",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 1165,
																		"src": "1514:24:0",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "IndexAccess",
																	"src": "1492:47:0",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"src": "1479:60:0",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"id": 152,
															"nodeType": "ExpressionStatement",
															"src": "1479:60:0"
														}
													]
												},
												"id": 154,
												"nodeType": "IfStatement",
												"src": "1348:206:0",
												"trueBody": {
													"id": 143,
													"nodeType": "Block",
													"src": "1385:70:0",
													"statements": [
														{
															"expression": {
																"argumentTypes": null,
																"id": 141,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftHandSide": {
																	"argumentTypes": null,
																	"id": 135,
																	"name": "controller",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 102,
																	"src": "1403:10:0",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"nodeType": "Assignment",
																"operator": "=",
																"rightHandSide": {
																	"argumentTypes": null,
																	"baseExpression": {
																		"argumentTypes": null,
																		"baseExpression": {
																			"argumentTypes": null,
																			"id": 136,
																			"name": "controllers",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 13,
																			"src": "1416:11:0",
																			"typeDescriptions": {
																				"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$",
																				"typeString": "mapping(address => address[] storage ref)"
																			}
																		},
																		"id": 138,
																		"indexExpression": {
																			"argumentTypes": null,
																			"id": 137,
																			"name": "identity",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 67,
																			"src": "1428:8:0",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"nodeType": "IndexAccess",
																		"src": "1416:21:0",
																		"typeDescriptions": {
																			"typeIdentifier": "t_array$_t_address_$dyn_storage",
																			"typeString": "address[] storage ref"
																		}
																	},
																	"id": 140,
																	"indexExpression": {
																		"argumentTypes": null,
																		"hexValue": "30",
																		"id": 139,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "number",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "1438:1:0",
																		"subdenomination": null,
																		"typeDescriptions": {
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		},
																		"value": "0"
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "IndexAccess",
																	"src": "1416:24:0",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"src": "1403:37:0",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"id": 142,
															"nodeType": "ExpressionStatement",
															"src": "1403:37:0"
														}
													]
												}
											}
										]
									},
									"id": 156,
									"nodeType": "IfStatement",
									"src": "1125:439:0",
									"trueBody": {
										"id": 130,
										"nodeType": "Block",
										"src": "1155:173:0",
										"statements": [
											{
												"assignments": [
													111
												],
												"declarations": [
													{
														"constant": false,
														"id": 111,
														"mutability": "mutable",
														"name": "currentController",
														"nodeType": "VariableDeclaration",
														"overrides": null,
														"scope": 130,
														"src": "1169:22:0",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 110,
															"name": "uint",
															"nodeType": "ElementaryTypeName",
															"src": "1169:4:0",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"value": null,
														"visibility": "internal"
													}
												],
												"id": 121,
												"initialValue": {
													"argumentTypes": null,
													"arguments": [
														{
															"argumentTypes": null,
															"id": 119,
															"name": "len",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 73,
															"src": "1245:3:0",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"expression": {
															"argumentTypes": null,
															"arguments": [
																{
																	"argumentTypes": null,
																	"expression": {
																		"argumentTypes": null,
																		"id": 115,
																		"name": "config",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 96,
																		"src": "1215:6:0",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_DIDConfig_$1170_storage_ptr",
																			"typeString": "struct IDIDRegistry.DIDConfig storage pointer"
																		}
																	},
																	"id": 116,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "keyRotationTime",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 1169,
																	"src": "1215:22:0",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																],
																"expression": {
																	"argumentTypes": null,
																	"expression": {
																		"argumentTypes": null,
																		"id": 112,
																		"name": "block",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": -4,
																		"src": "1194:5:0",
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_block",
																			"typeString": "block"
																		}
																	},
																	"id": 113,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "timestamp",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": null,
																	"src": "1194:15:0",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"id": 114,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "div",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 1468,
																"src": "1194:19:0",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
																	"typeString": "function (uint256,uint256) pure returns (uint256)"
																}
															},
															"id": 117,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "1194:45:0",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"id": 118,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "mod",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 1513,
														"src": "1194:49:0",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
															"typeString": "function (uint256,uint256) pure returns (uint256)"
														}
													},
													"id": 120,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1194:56:0",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "1169:81:0"
											},
											{
												"expression": {
													"argumentTypes": null,
													"id": 128,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"argumentTypes": null,
														"id": 122,
														"name": "controller",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 102,
														"src": "1264:10:0",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"argumentTypes": null,
														"baseExpression": {
															"argumentTypes": null,
															"baseExpression": {
																"argumentTypes": null,
																"id": 123,
																"name": "controllers",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 13,
																"src": "1277:11:0",
																"typeDescriptions": {
																	"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$",
																	"typeString": "mapping(address => address[] storage ref)"
																}
															},
															"id": 125,
															"indexExpression": {
																"argumentTypes": null,
																"id": 124,
																"name": "identity",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 67,
																"src": "1289:8:0",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"nodeType": "IndexAccess",
															"src": "1277:21:0",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_address_$dyn_storage",
																"typeString": "address[] storage ref"
															}
														},
														"id": 127,
														"indexExpression": {
															"argumentTypes": null,
															"id": 126,
															"name": "currentController",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 111,
															"src": "1299:17:0",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "IndexAccess",
														"src": "1277:40:0",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "1264:53:0",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"id": 129,
												"nodeType": "ExpressionStatement",
												"src": "1264:53:0"
											}
										]
									}
								},
								{
									"condition": {
										"argumentTypes": null,
										"commonType": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										},
										"id": 162,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"lValueRequested": false,
										"leftExpression": {
											"argumentTypes": null,
											"id": 157,
											"name": "controller",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 102,
											"src": "1577:10:0",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											}
										},
										"nodeType": "BinaryOperation",
										"operator": "!=",
										"rightExpression": {
											"argumentTypes": null,
											"arguments": [
												{
													"argumentTypes": null,
													"hexValue": "30",
													"id": 160,
													"isConstant": false,
													"isLValue": false,
													"isPure": true,
													"kind": "number",
													"lValueRequested": false,
													"nodeType": "Literal",
													"src": "1599:1:0",
													"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": 159,
												"isConstant": false,
												"isLValue": false,
												"isPure": true,
												"lValueRequested": false,
												"nodeType": "ElementaryTypeNameExpression",
												"src": "1591:7:0",
												"typeDescriptions": {
													"typeIdentifier": "t_type$_t_address_$",
													"typeString": "type(address)"
												},
												"typeName": {
													"id": 158,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1591:7:0",
													"typeDescriptions": {
														"typeIdentifier": null,
														"typeString": null
													}
												}
											},
											"id": 161,
											"isConstant": false,
											"isLValue": false,
											"isPure": true,
											"kind": "typeConversion",
											"lValueRequested": false,
											"names": [],
											"nodeType": "FunctionCall",
											"src": "1591:10:0",
											"tryCall": false,
											"typeDescriptions": {
												"typeIdentifier": "t_address_payable",
												"typeString": "address payable"
											}
										},
										"src": "1577:24:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bool",
											"typeString": "bool"
										}
									},
									"falseBody": null,
									"id": 165,
									"nodeType": "IfStatement",
									"src": "1573:47:0",
									"trueBody": {
										"expression": {
											"argumentTypes": null,
											"id": 163,
											"name": "controller",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 102,
											"src": "1610:10:0",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											}
										},
										"functionReturnParameters": 71,
										"id": 164,
										"nodeType": "Return",
										"src": "1603:17:0"
									}
								},
								{
									"expression": {
										"argumentTypes": null,
										"id": 166,
										"name": "identity",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"referencedDeclaration": 67,
										"src": "1637:8:0",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"functionReturnParameters": 71,
									"id": 167,
									"nodeType": "Return",
									"src": "1630:15:0"
								}
							]
						},
						"documentation": null,
						"functionSelector": "ffb628e2",
						"id": 169,
						"implemented": true,
						"kind": "function",
						"modifiers": [],
						"name": "identityController",
						"nodeType": "FunctionDefinition",
						"overrides": null,
						"parameters": {
							"id": 68,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 67,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 169,
									"src": "829:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 66,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "829:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "828:18:0"
						},
						"returnParameters": {
							"id": 71,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 70,
									"mutability": "mutable",
									"name": "",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 169,
									"src": "868:7:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 69,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "868:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "867:9:0"
						},
						"scope": 894,
						"src": "801:851:0",
						"stateMutability": "view",
						"virtual": false,
						"visibility": "public"
					},
					{
						"body": {
							"id": 208,
							"nodeType": "Block",
							"src": "1781:172:0",
							"statements": [
								{
									"assignments": [
										185
									],
									"declarations": [
										{
											"constant": false,
											"id": 185,
											"mutability": "mutable",
											"name": "signer",
											"nodeType": "VariableDeclaration",
											"overrides": null,
											"scope": 208,
											"src": "1791:14:0",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											},
											"typeName": {
												"id": 184,
												"name": "address",
												"nodeType": "ElementaryTypeName",
												"src": "1791:7:0",
												"stateMutability": "nonpayable",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											"value": null,
											"visibility": "internal"
										}
									],
									"id": 192,
									"initialValue": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"id": 187,
												"name": "hash",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 179,
												"src": "1818:4:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												}
											},
											{
												"argumentTypes": null,
												"id": 188,
												"name": "sigV",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 173,
												"src": "1824:4:0",
												"typeDescriptions": {
													"typeIdentifier": "t_uint8",
													"typeString": "uint8"
												}
											},
											{
												"argumentTypes": null,
												"id": 189,
												"name": "sigR",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 175,
												"src": "1830:4:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												}
											},
											{
												"argumentTypes": null,
												"id": 190,
												"name": "sigS",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 177,
												"src": "1836:4:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												},
												{
													"typeIdentifier": "t_uint8",
													"typeString": "uint8"
												},
												{
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												},
												{
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												}
											],
											"id": 186,
											"name": "ecrecover",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": -6,
											"src": "1808:9:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
												"typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
											}
										},
										"id": 191,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "1808:33:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"nodeType": "VariableDeclarationStatement",
									"src": "1791:50:0"
								},
								{
									"expression": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"commonType": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"id": 198,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"lValueRequested": false,
												"leftExpression": {
													"argumentTypes": null,
													"id": 194,
													"name": "signer",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 185,
													"src": "1859:6:0",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"nodeType": "BinaryOperation",
												"operator": "==",
												"rightExpression": {
													"argumentTypes": null,
													"arguments": [
														{
															"argumentTypes": null,
															"id": 196,
															"name": "identity",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 171,
															"src": "1888:8:0",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"id": 195,
														"name": "identityController",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 169,
														"src": "1869:18:0",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
															"typeString": "function (address) view returns (address)"
														}
													},
													"id": 197,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1869:28:0",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"src": "1859:38:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												}
											],
											"id": 193,
											"name": "require",
											"nodeType": "Identifier",
											"overloadedDeclarations": [
												-18,
												-18
											],
											"referencedDeclaration": -18,
											"src": "1851:7:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
												"typeString": "function (bool) pure"
											}
										},
										"id": 199,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "1851:47:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 200,
									"nodeType": "ExpressionStatement",
									"src": "1851:47:0"
								},
								{
									"expression": {
										"argumentTypes": null,
										"id": 204,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"lValueRequested": false,
										"nodeType": "UnaryOperation",
										"operator": "++",
										"prefix": false,
										"src": "1908:15:0",
										"subExpression": {
											"argumentTypes": null,
											"baseExpression": {
												"argumentTypes": null,
												"id": 201,
												"name": "nonce",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 25,
												"src": "1908:5:0",
												"typeDescriptions": {
													"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
													"typeString": "mapping(address => uint256)"
												}
											},
											"id": 203,
											"indexExpression": {
												"argumentTypes": null,
												"id": 202,
												"name": "signer",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 185,
												"src": "1914:6:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											"isConstant": false,
											"isLValue": true,
											"isPure": false,
											"lValueRequested": true,
											"nodeType": "IndexAccess",
											"src": "1908:13:0",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											}
										},
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									},
									"id": 205,
									"nodeType": "ExpressionStatement",
									"src": "1908:15:0"
								},
								{
									"expression": {
										"argumentTypes": null,
										"id": 206,
										"name": "signer",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"referencedDeclaration": 185,
										"src": "1940:6:0",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"functionReturnParameters": 183,
									"id": 207,
									"nodeType": "Return",
									"src": "1933:13:0"
								}
							]
						},
						"documentation": null,
						"id": 209,
						"implemented": true,
						"kind": "function",
						"modifiers": [],
						"name": "checkSignature",
						"nodeType": "FunctionDefinition",
						"overrides": null,
						"parameters": {
							"id": 180,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 171,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 209,
									"src": "1682:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 170,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "1682:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 173,
									"mutability": "mutable",
									"name": "sigV",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 209,
									"src": "1700:10:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_uint8",
										"typeString": "uint8"
									},
									"typeName": {
										"id": 172,
										"name": "uint8",
										"nodeType": "ElementaryTypeName",
										"src": "1700:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_uint8",
											"typeString": "uint8"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 175,
									"mutability": "mutable",
									"name": "sigR",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 209,
									"src": "1712:12:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes32",
										"typeString": "bytes32"
									},
									"typeName": {
										"id": 174,
										"name": "bytes32",
										"nodeType": "ElementaryTypeName",
										"src": "1712:7:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes32",
											"typeString": "bytes32"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 177,
									"mutability": "mutable",
									"name": "sigS",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 209,
									"src": "1726:12:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes32",
										"typeString": "bytes32"
									},
									"typeName": {
										"id": 176,
										"name": "bytes32",
										"nodeType": "ElementaryTypeName",
										"src": "1726:7:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes32",
											"typeString": "bytes32"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 179,
									"mutability": "mutable",
									"name": "hash",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 209,
									"src": "1740:12:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes32",
										"typeString": "bytes32"
									},
									"typeName": {
										"id": 178,
										"name": "bytes32",
										"nodeType": "ElementaryTypeName",
										"src": "1740:7:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes32",
											"typeString": "bytes32"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "1681:72:0"
						},
						"returnParameters": {
							"id": 183,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 182,
									"mutability": "mutable",
									"name": "",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 209,
									"src": "1772:7:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 181,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "1772:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "1771:9:0"
						},
						"scope": 894,
						"src": "1658:295:0",
						"stateMutability": "nonpayable",
						"virtual": false,
						"visibility": "internal"
					},
					{
						"body": {
							"id": 228,
							"nodeType": "Block",
							"src": "2028:103:0",
							"statements": [
								{
									"assignments": [
										217
									],
									"declarations": [
										{
											"constant": false,
											"id": 217,
											"mutability": "mutable",
											"name": "config",
											"nodeType": "VariableDeclaration",
											"overrides": null,
											"scope": 228,
											"src": "2038:24:0",
											"stateVariable": false,
											"storageLocation": "storage",
											"typeDescriptions": {
												"typeIdentifier": "t_struct$_DIDConfig_$1170_storage_ptr",
												"typeString": "struct IDIDRegistry.DIDConfig"
											},
											"typeName": {
												"contractScope": null,
												"id": 216,
												"name": "DIDConfig",
												"nodeType": "UserDefinedTypeName",
												"referencedDeclaration": 1170,
												"src": "2038:9:0",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_DIDConfig_$1170_storage_ptr",
													"typeString": "struct IDIDRegistry.DIDConfig"
												}
											},
											"value": null,
											"visibility": "internal"
										}
									],
									"id": 221,
									"initialValue": {
										"argumentTypes": null,
										"baseExpression": {
											"argumentTypes": null,
											"id": 218,
											"name": "configs",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 17,
											"src": "2065:7:0",
											"typeDescriptions": {
												"typeIdentifier": "t_mapping$_t_address_$_t_struct$_DIDConfig_$1170_storage_$",
												"typeString": "mapping(address => struct IDIDRegistry.DIDConfig storage ref)"
											}
										},
										"id": 220,
										"indexExpression": {
											"argumentTypes": null,
											"id": 219,
											"name": "identity",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 211,
											"src": "2073:8:0",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											}
										},
										"isConstant": false,
										"isLValue": true,
										"isPure": false,
										"lValueRequested": false,
										"nodeType": "IndexAccess",
										"src": "2065:17:0",
										"typeDescriptions": {
											"typeIdentifier": "t_struct$_DIDConfig_$1170_storage",
											"typeString": "struct IDIDRegistry.DIDConfig storage ref"
										}
									},
									"nodeType": "VariableDeclarationStatement",
									"src": "2038:44:0"
								},
								{
									"expression": {
										"argumentTypes": null,
										"id": 226,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"lValueRequested": false,
										"leftHandSide": {
											"argumentTypes": null,
											"expression": {
												"argumentTypes": null,
												"id": 222,
												"name": "config",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 217,
												"src": "2092:6:0",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_DIDConfig_$1170_storage_ptr",
													"typeString": "struct IDIDRegistry.DIDConfig storage pointer"
												}
											},
											"id": 224,
											"isConstant": false,
											"isLValue": true,
											"isPure": false,
											"lValueRequested": true,
											"memberName": "currentController",
											"nodeType": "MemberAccess",
											"referencedDeclaration": 1165,
											"src": "2092:24:0",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											}
										},
										"nodeType": "Assignment",
										"operator": "=",
										"rightHandSide": {
											"argumentTypes": null,
											"id": 225,
											"name": "index",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 213,
											"src": "2119:5:0",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											}
										},
										"src": "2092:32:0",
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									},
									"id": 227,
									"nodeType": "ExpressionStatement",
									"src": "2092:32:0"
								}
							]
						},
						"documentation": null,
						"id": 229,
						"implemented": true,
						"kind": "function",
						"modifiers": [],
						"name": "setCurrentController",
						"nodeType": "FunctionDefinition",
						"overrides": null,
						"parameters": {
							"id": 214,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 211,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 229,
									"src": "1989:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 210,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "1989:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 213,
									"mutability": "mutable",
									"name": "index",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 229,
									"src": "2007:10:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_uint256",
										"typeString": "uint256"
									},
									"typeName": {
										"id": 212,
										"name": "uint",
										"nodeType": "ElementaryTypeName",
										"src": "2007:4:0",
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "1988:30:0"
						},
						"returnParameters": {
							"id": 215,
							"nodeType": "ParameterList",
							"parameters": [],
							"src": "2028:0:0"
						},
						"scope": 894,
						"src": "1959:172:0",
						"stateMutability": "nonpayable",
						"virtual": false,
						"visibility": "internal"
					},
					{
						"body": {
							"id": 270,
							"nodeType": "Block",
							"src": "2232:206:0",
							"statements": [
								{
									"body": {
										"id": 265,
										"nodeType": "Block",
										"src": "2298:114:0",
										"statements": [
											{
												"condition": {
													"argumentTypes": null,
													"commonType": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													},
													"id": 257,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"argumentTypes": null,
														"baseExpression": {
															"argumentTypes": null,
															"baseExpression": {
																"argumentTypes": null,
																"id": 251,
																"name": "controllers",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 13,
																"src": "2316:11:0",
																"typeDescriptions": {
																	"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$",
																	"typeString": "mapping(address => address[] storage ref)"
																}
															},
															"id": 253,
															"indexExpression": {
																"argumentTypes": null,
																"id": 252,
																"name": "identity",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 231,
																"src": "2328:8:0",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"nodeType": "IndexAccess",
															"src": "2316:21:0",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_address_$dyn_storage",
																"typeString": "address[] storage ref"
															}
														},
														"id": 255,
														"indexExpression": {
															"argumentTypes": null,
															"id": 254,
															"name": "i",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 239,
															"src": "2338:1:0",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "IndexAccess",
														"src": "2316:24:0",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"argumentTypes": null,
														"id": 256,
														"name": "controller",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 233,
														"src": "2344:10:0",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "2316:38:0",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"falseBody": null,
												"id": 264,
												"nodeType": "IfStatement",
												"src": "2312:90:0",
												"trueBody": {
													"id": 263,
													"nodeType": "Block",
													"src": "2356:46:0",
													"statements": [
														{
															"expression": {
																"argumentTypes": null,
																"arguments": [
																	{
																		"argumentTypes": null,
																		"id": 260,
																		"name": "i",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 239,
																		"src": "2385:1:0",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	],
																	"id": 259,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"nodeType": "ElementaryTypeNameExpression",
																	"src": "2381:3:0",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_int256_$",
																		"typeString": "type(int256)"
																	},
																	"typeName": {
																		"id": 258,
																		"name": "int",
																		"nodeType": "ElementaryTypeName",
																		"src": "2381:3:0",
																		"typeDescriptions": {
																			"typeIdentifier": null,
																			"typeString": null
																		}
																	}
																},
																"id": 261,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "2381:6:0",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																}
															},
															"functionReturnParameters": 237,
															"id": 262,
															"nodeType": "Return",
															"src": "2374:13:0"
														}
													]
												}
											}
										]
									},
									"condition": {
										"argumentTypes": null,
										"commonType": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										},
										"id": 247,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"lValueRequested": false,
										"leftExpression": {
											"argumentTypes": null,
											"id": 242,
											"name": "i",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 239,
											"src": "2259:1:0",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											}
										},
										"nodeType": "BinaryOperation",
										"operator": "<",
										"rightExpression": {
											"argumentTypes": null,
											"expression": {
												"argumentTypes": null,
												"baseExpression": {
													"argumentTypes": null,
													"id": 243,
													"name": "controllers",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 13,
													"src": "2263:11:0",
													"typeDescriptions": {
														"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$",
														"typeString": "mapping(address => address[] storage ref)"
													}
												},
												"id": 245,
												"indexExpression": {
													"argumentTypes": null,
													"id": 244,
													"name": "identity",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 231,
													"src": "2275:8:0",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"isConstant": false,
												"isLValue": true,
												"isPure": false,
												"lValueRequested": false,
												"nodeType": "IndexAccess",
												"src": "2263:21:0",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_address_$dyn_storage",
													"typeString": "address[] storage ref"
												}
											},
											"id": 246,
											"isConstant": false,
											"isLValue": false,
											"isPure": false,
											"lValueRequested": false,
											"memberName": "length",
											"nodeType": "MemberAccess",
											"referencedDeclaration": null,
											"src": "2263:28:0",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											}
										},
										"src": "2259:32:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bool",
											"typeString": "bool"
										}
									},
									"id": 266,
									"initializationExpression": {
										"assignments": [
											239
										],
										"declarations": [
											{
												"constant": false,
												"id": 239,
												"mutability": "mutable",
												"name": "i",
												"nodeType": "VariableDeclaration",
												"overrides": null,
												"scope": 266,
												"src": "2247:6:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 238,
													"name": "uint",
													"nodeType": "ElementaryTypeName",
													"src": "2247:4:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"value": null,
												"visibility": "internal"
											}
										],
										"id": 241,
										"initialValue": {
											"argumentTypes": null,
											"hexValue": "30",
											"id": 240,
											"isConstant": false,
											"isLValue": false,
											"isPure": true,
											"kind": "number",
											"lValueRequested": false,
											"nodeType": "Literal",
											"src": "2256:1:0",
											"subdenomination": null,
											"typeDescriptions": {
												"typeIdentifier": "t_rational_0_by_1",
												"typeString": "int_const 0"
											},
											"value": "0"
										},
										"nodeType": "VariableDeclarationStatement",
										"src": "2247:10:0"
									},
									"loopExpression": {
										"expression": {
											"argumentTypes": null,
											"id": 249,
											"isConstant": false,
											"isLValue": false,
											"isPure": false,
											"lValueRequested": false,
											"nodeType": "UnaryOperation",
											"operator": "++",
											"prefix": false,
											"src": "2293:3:0",
											"subExpression": {
												"argumentTypes": null,
												"id": 248,
												"name": "i",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 239,
												"src": "2293:1:0",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											},
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											}
										},
										"id": 250,
										"nodeType": "ExpressionStatement",
										"src": "2293:3:0"
									},
									"nodeType": "ForStatement",
									"src": "2242:170:0"
								},
								{
									"expression": {
										"argumentTypes": null,
										"id": 268,
										"isConstant": false,
										"isLValue": false,
										"isPure": true,
										"lValueRequested": false,
										"nodeType": "UnaryOperation",
										"operator": "-",
										"prefix": true,
										"src": "2428:3:0",
										"subExpression": {
											"argumentTypes": null,
											"hexValue": "31",
											"id": 267,
											"isConstant": false,
											"isLValue": false,
											"isPure": true,
											"kind": "number",
											"lValueRequested": false,
											"nodeType": "Literal",
											"src": "2430:1:0",
											"subdenomination": null,
											"typeDescriptions": {
												"typeIdentifier": "t_rational_1_by_1",
												"typeString": "int_const 1"
											},
											"value": "1"
										},
										"typeDescriptions": {
											"typeIdentifier": "t_rational_minus_1_by_1",
											"typeString": "int_const -1"
										}
									},
									"functionReturnParameters": 237,
									"id": 269,
									"nodeType": "Return",
									"src": "2421:10:0"
								}
							]
						},
						"documentation": null,
						"id": 271,
						"implemented": true,
						"kind": "function",
						"modifiers": [],
						"name": "_getControllerIndex",
						"nodeType": "FunctionDefinition",
						"overrides": null,
						"parameters": {
							"id": 234,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 231,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 271,
									"src": "2166:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 230,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "2166:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 233,
									"mutability": "mutable",
									"name": "controller",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 271,
									"src": "2184:18:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 232,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "2184:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "2165:38:0"
						},
						"returnParameters": {
							"id": 237,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 236,
									"mutability": "mutable",
									"name": "",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 271,
									"src": "2227:3:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_int256",
										"typeString": "int256"
									},
									"typeName": {
										"id": 235,
										"name": "int",
										"nodeType": "ElementaryTypeName",
										"src": "2227:3:0",
										"typeDescriptions": {
											"typeIdentifier": "t_int256",
											"typeString": "int256"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "2226:5:0"
						},
						"scope": 894,
						"src": "2137:301:0",
						"stateMutability": "view",
						"virtual": false,
						"visibility": "internal"
					},
					{
						"body": {
							"id": 318,
							"nodeType": "Block",
							"src": "2564:309:0",
							"statements": [
								{
									"assignments": [
										285
									],
									"declarations": [
										{
											"constant": false,
											"id": 285,
											"mutability": "mutable",
											"name": "controllerIndex",
											"nodeType": "VariableDeclaration",
											"overrides": null,
											"scope": 318,
											"src": "2574:19:0",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_int256",
												"typeString": "int256"
											},
											"typeName": {
												"id": 284,
												"name": "int",
												"nodeType": "ElementaryTypeName",
												"src": "2574:3:0",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												}
											},
											"value": null,
											"visibility": "internal"
										}
									],
									"id": 290,
									"initialValue": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"id": 287,
												"name": "identity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 273,
												"src": "2616:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											{
												"argumentTypes": null,
												"id": 288,
												"name": "newController",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 277,
												"src": "2626:13:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											],
											"id": 286,
											"name": "_getControllerIndex",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 271,
											"src": "2596:19:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_int256_$",
												"typeString": "function (address,address) view returns (int256)"
											}
										},
										"id": 289,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "2596:44:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_int256",
											"typeString": "int256"
										}
									},
									"nodeType": "VariableDeclarationStatement",
									"src": "2574:66:0"
								},
								{
									"condition": {
										"argumentTypes": null,
										"commonType": {
											"typeIdentifier": "t_int256",
											"typeString": "int256"
										},
										"id": 293,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"lValueRequested": false,
										"leftExpression": {
											"argumentTypes": null,
											"id": 291,
											"name": "controllerIndex",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 285,
											"src": "2655:15:0",
											"typeDescriptions": {
												"typeIdentifier": "t_int256",
												"typeString": "int256"
											}
										},
										"nodeType": "BinaryOperation",
										"operator": "<",
										"rightExpression": {
											"argumentTypes": null,
											"hexValue": "30",
											"id": 292,
											"isConstant": false,
											"isLValue": false,
											"isPure": true,
											"kind": "number",
											"lValueRequested": false,
											"nodeType": "Literal",
											"src": "2673:1:0",
											"subdenomination": null,
											"typeDescriptions": {
												"typeIdentifier": "t_rational_0_by_1",
												"typeString": "int_const 0"
											},
											"value": "0"
										},
										"src": "2655:19:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bool",
											"typeString": "bool"
										}
									},
									"falseBody": null,
									"id": 317,
									"nodeType": "IfStatement",
									"src": "2651:216:0",
									"trueBody": {
										"id": 316,
										"nodeType": "Block",
										"src": "2676:191:0",
										"statements": [
											{
												"condition": {
													"argumentTypes": null,
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 299,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"argumentTypes": null,
														"expression": {
															"argumentTypes": null,
															"baseExpression": {
																"argumentTypes": null,
																"id": 294,
																"name": "controllers",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 13,
																"src": "2694:11:0",
																"typeDescriptions": {
																	"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$",
																	"typeString": "mapping(address => address[] storage ref)"
																}
															},
															"id": 296,
															"indexExpression": {
																"argumentTypes": null,
																"id": 295,
																"name": "identity",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 273,
																"src": "2706:8:0",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"nodeType": "IndexAccess",
															"src": "2694:21:0",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_address_$dyn_storage",
																"typeString": "address[] storage ref"
															}
														},
														"id": 297,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "length",
														"nodeType": "MemberAccess",
														"referencedDeclaration": null,
														"src": "2694:28:0",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"argumentTypes": null,
														"hexValue": "30",
														"id": 298,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "2726:1:0",
														"subdenomination": null,
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"src": "2694:33:0",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"falseBody": null,
												"id": 308,
												"nodeType": "IfStatement",
												"src": "2690:110:0",
												"trueBody": {
													"id": 307,
													"nodeType": "Block",
													"src": "2729:71:0",
													"statements": [
														{
															"expression": {
																"argumentTypes": null,
																"arguments": [
																	{
																		"argumentTypes": null,
																		"id": 304,
																		"name": "identity",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 273,
																		"src": "2775:8:0",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	],
																	"expression": {
																		"argumentTypes": null,
																		"baseExpression": {
																			"argumentTypes": null,
																			"id": 300,
																			"name": "controllers",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 13,
																			"src": "2747:11:0",
																			"typeDescriptions": {
																				"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$",
																				"typeString": "mapping(address => address[] storage ref)"
																			}
																		},
																		"id": 302,
																		"indexExpression": {
																			"argumentTypes": null,
																			"id": 301,
																			"name": "identity",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 273,
																			"src": "2759:8:0",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"nodeType": "IndexAccess",
																		"src": "2747:21:0",
																		"typeDescriptions": {
																			"typeIdentifier": "t_array$_t_address_$dyn_storage",
																			"typeString": "address[] storage ref"
																		}
																	},
																	"id": 303,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "push",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": null,
																	"src": "2747:26:0",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$__$",
																		"typeString": "function (address)"
																	}
																},
																"id": 305,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "2747:38:0",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 306,
															"nodeType": "ExpressionStatement",
															"src": "2747:38:0"
														}
													]
												}
											},
											{
												"expression": {
													"argumentTypes": null,
													"arguments": [
														{
															"argumentTypes": null,
															"id": 313,
															"name": "newController",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 277,
															"src": "2841:13:0",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"expression": {
															"argumentTypes": null,
															"baseExpression": {
																"argumentTypes": null,
																"id": 309,
																"name": "controllers",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 13,
																"src": "2813:11:0",
																"typeDescriptions": {
																	"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$",
																	"typeString": "mapping(address => address[] storage ref)"
																}
															},
															"id": 311,
															"indexExpression": {
																"argumentTypes": null,
																"id": 310,
																"name": "identity",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 273,
																"src": "2825:8:0",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"nodeType": "IndexAccess",
															"src": "2813:21:0",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_address_$dyn_storage",
																"typeString": "address[] storage ref"
															}
														},
														"id": 312,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "push",
														"nodeType": "MemberAccess",
														"referencedDeclaration": null,
														"src": "2813:26:0",
														"typeDescriptions": {
															"typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$__$",
															"typeString": "function (address)"
														}
													},
													"id": 314,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2813:43:0",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 315,
												"nodeType": "ExpressionStatement",
												"src": "2813:43:0"
											}
										]
									}
								}
							]
						},
						"documentation": null,
						"id": 319,
						"implemented": true,
						"kind": "function",
						"modifiers": [
							{
								"arguments": [
									{
										"argumentTypes": null,
										"id": 280,
										"name": "identity",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"referencedDeclaration": 273,
										"src": "2547:8:0",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									{
										"argumentTypes": null,
										"id": 281,
										"name": "actor",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"referencedDeclaration": 275,
										"src": "2557:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									}
								],
								"id": 282,
								"modifierName": {
									"argumentTypes": null,
									"id": 279,
									"name": "onlyController",
									"nodeType": "Identifier",
									"overloadedDeclarations": [],
									"referencedDeclaration": 53,
									"src": "2532:14:0",
									"typeDescriptions": {
										"typeIdentifier": "t_modifier$_t_address_$_t_address_$",
										"typeString": "modifier (address,address)"
									}
								},
								"nodeType": "ModifierInvocation",
								"src": "2532:31:0"
							}
						],
						"name": "addController",
						"nodeType": "FunctionDefinition",
						"overrides": null,
						"parameters": {
							"id": 278,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 273,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 319,
									"src": "2467:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 272,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "2467:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 275,
									"mutability": "mutable",
									"name": "actor",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 319,
									"src": "2485:13:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 274,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "2485:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 277,
									"mutability": "mutable",
									"name": "newController",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 319,
									"src": "2500:21:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 276,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "2500:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "2466:56:0"
						},
						"returnParameters": {
							"id": 283,
							"nodeType": "ParameterList",
							"parameters": [],
							"src": "2564:0:0"
						},
						"scope": 894,
						"src": "2444:429:0",
						"stateMutability": "nonpayable",
						"virtual": false,
						"visibility": "internal"
					},
					{
						"body": {
							"id": 425,
							"nodeType": "Block",
							"src": "2999:765:0",
							"statements": [
								{
									"expression": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"commonType": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"id": 338,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"lValueRequested": false,
												"leftExpression": {
													"argumentTypes": null,
													"expression": {
														"argumentTypes": null,
														"baseExpression": {
															"argumentTypes": null,
															"id": 333,
															"name": "controllers",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 13,
															"src": "3018:11:0",
															"typeDescriptions": {
																"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$",
																"typeString": "mapping(address => address[] storage ref)"
															}
														},
														"id": 335,
														"indexExpression": {
															"argumentTypes": null,
															"id": 334,
															"name": "identity",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 321,
															"src": "3030:8:0",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "IndexAccess",
														"src": "3018:21:0",
														"typeDescriptions": {
															"typeIdentifier": "t_array$_t_address_$dyn_storage",
															"typeString": "address[] storage ref"
														}
													},
													"id": 336,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"memberName": "length",
													"nodeType": "MemberAccess",
													"referencedDeclaration": null,
													"src": "3018:28:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "BinaryOperation",
												"operator": ">",
												"rightExpression": {
													"argumentTypes": null,
													"hexValue": "31",
													"id": 337,
													"isConstant": false,
													"isLValue": false,
													"isPure": true,
													"kind": "number",
													"lValueRequested": false,
													"nodeType": "Literal",
													"src": "3049:1:0",
													"subdenomination": null,
													"typeDescriptions": {
														"typeIdentifier": "t_rational_1_by_1",
														"typeString": "int_const 1"
													},
													"value": "1"
												},
												"src": "3018:32:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												}
											},
											{
												"argumentTypes": null,
												"hexValue": "596f75206e656564206174206c656173742074776f20636f6e74726f6c6c65727320746f2064656c657465",
												"id": 339,
												"isConstant": false,
												"isLValue": false,
												"isPure": true,
												"kind": "string",
												"lValueRequested": false,
												"nodeType": "Literal",
												"src": "3052:45:0",
												"subdenomination": null,
												"typeDescriptions": {
													"typeIdentifier": "t_stringliteral_c367431d6dadedf6b202e8128c9ff00baae2a1e7df5a6f6f7d65f0e311cf6d43",
													"typeString": "literal_string \"You need at least two controllers to delete\""
												},
												"value": "You need at least two controllers to delete"
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												{
													"typeIdentifier": "t_stringliteral_c367431d6dadedf6b202e8128c9ff00baae2a1e7df5a6f6f7d65f0e311cf6d43",
													"typeString": "literal_string \"You need at least two controllers to delete\""
												}
											],
											"id": 332,
											"name": "require",
											"nodeType": "Identifier",
											"overloadedDeclarations": [
												-18,
												-18
											],
											"referencedDeclaration": -18,
											"src": "3009:7:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
												"typeString": "function (bool,string memory) pure"
											}
										},
										"id": 340,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "3009:90:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 341,
									"nodeType": "ExpressionStatement",
									"src": "3009:90:0"
								},
								{
									"expression": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"commonType": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"id": 347,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"lValueRequested": false,
												"leftExpression": {
													"argumentTypes": null,
													"arguments": [
														{
															"argumentTypes": null,
															"id": 344,
															"name": "identity",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 321,
															"src": "3137:8:0",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"id": 343,
														"name": "identityController",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 169,
														"src": "3118:18:0",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
															"typeString": "function (address) view returns (address)"
														}
													},
													"id": 345,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3118:28:0",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"nodeType": "BinaryOperation",
												"operator": "!=",
												"rightExpression": {
													"argumentTypes": null,
													"id": 346,
													"name": "controller",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 325,
													"src": "3150:10:0",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"src": "3118:42:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												}
											},
											{
												"argumentTypes": null,
												"hexValue": "596f752063616e6e6f742064656c6574652063757272656e7420636f6e74726f6c6c6572",
												"id": 348,
												"isConstant": false,
												"isLValue": false,
												"isPure": true,
												"kind": "string",
												"lValueRequested": false,
												"nodeType": "Literal",
												"src": "3163:38:0",
												"subdenomination": null,
												"typeDescriptions": {
													"typeIdentifier": "t_stringliteral_4af8cb8490d846c5d7bd639624ac1aa7650ad182eacab6c59707562df440745a",
													"typeString": "literal_string \"You cannot delete current controller\""
												},
												"value": "You cannot delete current controller"
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												{
													"typeIdentifier": "t_stringliteral_4af8cb8490d846c5d7bd639624ac1aa7650ad182eacab6c59707562df440745a",
													"typeString": "literal_string \"You cannot delete current controller\""
												}
											],
											"id": 342,
											"name": "require",
											"nodeType": "Identifier",
											"overloadedDeclarations": [
												-18,
												-18
											],
											"referencedDeclaration": -18,
											"src": "3109:7:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
												"typeString": "function (bool,string memory) pure"
											}
										},
										"id": 349,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "3109:94:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 350,
									"nodeType": "ExpressionStatement",
									"src": "3109:94:0"
								},
								{
									"assignments": [
										352
									],
									"declarations": [
										{
											"constant": false,
											"id": 352,
											"mutability": "mutable",
											"name": "controllerIndex",
											"nodeType": "VariableDeclaration",
											"overrides": null,
											"scope": 425,
											"src": "3213:19:0",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_int256",
												"typeString": "int256"
											},
											"typeName": {
												"id": 351,
												"name": "int",
												"nodeType": "ElementaryTypeName",
												"src": "3213:3:0",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												}
											},
											"value": null,
											"visibility": "internal"
										}
									],
									"id": 357,
									"initialValue": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"id": 354,
												"name": "identity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 321,
												"src": "3255:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											{
												"argumentTypes": null,
												"id": 355,
												"name": "controller",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 325,
												"src": "3265:10:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											],
											"id": 353,
											"name": "_getControllerIndex",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 271,
											"src": "3235:19:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_int256_$",
												"typeString": "function (address,address) view returns (int256)"
											}
										},
										"id": 356,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "3235:41:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_int256",
											"typeString": "int256"
										}
									},
									"nodeType": "VariableDeclarationStatement",
									"src": "3213:63:0"
								},
								{
									"expression": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"commonType": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"id": 361,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"lValueRequested": false,
												"leftExpression": {
													"argumentTypes": null,
													"id": 359,
													"name": "controllerIndex",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 352,
													"src": "3296:15:0",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"nodeType": "BinaryOperation",
												"operator": ">=",
												"rightExpression": {
													"argumentTypes": null,
													"hexValue": "30",
													"id": 360,
													"isConstant": false,
													"isLValue": false,
													"isPure": true,
													"kind": "number",
													"lValueRequested": false,
													"nodeType": "Literal",
													"src": "3315:1:0",
													"subdenomination": null,
													"typeDescriptions": {
														"typeIdentifier": "t_rational_0_by_1",
														"typeString": "int_const 0"
													},
													"value": "0"
												},
												"src": "3296:20:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												}
											},
											{
												"argumentTypes": null,
												"hexValue": "436f6e74726f6c6c6572206e6f74206578697374",
												"id": 362,
												"isConstant": false,
												"isLValue": false,
												"isPure": true,
												"kind": "string",
												"lValueRequested": false,
												"nodeType": "Literal",
												"src": "3318:22:0",
												"subdenomination": null,
												"typeDescriptions": {
													"typeIdentifier": "t_stringliteral_8f45c3e8e615970c10ea55ef8ca61495ce88e6bd6ca402e6598a17e3d6bbd722",
													"typeString": "literal_string \"Controller not exist\""
												},
												"value": "Controller not exist"
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												{
													"typeIdentifier": "t_stringliteral_8f45c3e8e615970c10ea55ef8ca61495ce88e6bd6ca402e6598a17e3d6bbd722",
													"typeString": "literal_string \"Controller not exist\""
												}
											],
											"id": 358,
											"name": "require",
											"nodeType": "Identifier",
											"overloadedDeclarations": [
												-18,
												-18
											],
											"referencedDeclaration": -18,
											"src": "3287:7:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
												"typeString": "function (bool,string memory) pure"
											}
										},
										"id": 363,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "3287:55:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 364,
									"nodeType": "ExpressionStatement",
									"src": "3287:55:0"
								},
								{
									"assignments": [
										366
									],
									"declarations": [
										{
											"constant": false,
											"id": 366,
											"mutability": "mutable",
											"name": "len",
											"nodeType": "VariableDeclaration",
											"overrides": null,
											"scope": 425,
											"src": "3353:8:0",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											},
											"typeName": {
												"id": 365,
												"name": "uint",
												"nodeType": "ElementaryTypeName",
												"src": "3353:4:0",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											},
											"value": null,
											"visibility": "internal"
										}
									],
									"id": 371,
									"initialValue": {
										"argumentTypes": null,
										"expression": {
											"argumentTypes": null,
											"baseExpression": {
												"argumentTypes": null,
												"id": 367,
												"name": "controllers",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 13,
												"src": "3364:11:0",
												"typeDescriptions": {
													"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$",
													"typeString": "mapping(address => address[] storage ref)"
												}
											},
											"id": 369,
											"indexExpression": {
												"argumentTypes": null,
												"id": 368,
												"name": "identity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 321,
												"src": "3376:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											"isConstant": false,
											"isLValue": true,
											"isPure": false,
											"lValueRequested": false,
											"nodeType": "IndexAccess",
											"src": "3364:21:0",
											"typeDescriptions": {
												"typeIdentifier": "t_array$_t_address_$dyn_storage",
												"typeString": "address[] storage ref"
											}
										},
										"id": 370,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"lValueRequested": false,
										"memberName": "length",
										"nodeType": "MemberAccess",
										"referencedDeclaration": null,
										"src": "3364:28:0",
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									},
									"nodeType": "VariableDeclarationStatement",
									"src": "3353:39:0"
								},
								{
									"assignments": [
										373
									],
									"declarations": [
										{
											"constant": false,
											"id": 373,
											"mutability": "mutable",
											"name": "lastController",
											"nodeType": "VariableDeclaration",
											"overrides": null,
											"scope": 425,
											"src": "3402:22:0",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											},
											"typeName": {
												"id": 372,
												"name": "address",
												"nodeType": "ElementaryTypeName",
												"src": "3402:7:0",
												"stateMutability": "nonpayable",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											"value": null,
											"visibility": "internal"
										}
									],
									"id": 381,
									"initialValue": {
										"argumentTypes": null,
										"baseExpression": {
											"argumentTypes": null,
											"baseExpression": {
												"argumentTypes": null,
												"id": 374,
												"name": "controllers",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 13,
												"src": "3427:11:0",
												"typeDescriptions": {
													"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$",
													"typeString": "mapping(address => address[] storage ref)"
												}
											},
											"id": 376,
											"indexExpression": {
												"argumentTypes": null,
												"id": 375,
												"name": "identity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 321,
												"src": "3439:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											"isConstant": false,
											"isLValue": true,
											"isPure": false,
											"lValueRequested": false,
											"nodeType": "IndexAccess",
											"src": "3427:21:0",
											"typeDescriptions": {
												"typeIdentifier": "t_array$_t_address_$dyn_storage",
												"typeString": "address[] storage ref"
											}
										},
										"id": 380,
										"indexExpression": {
											"argumentTypes": null,
											"commonType": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											},
											"id": 379,
											"isConstant": false,
											"isLValue": false,
											"isPure": false,
											"lValueRequested": false,
											"leftExpression": {
												"argumentTypes": null,
												"id": 377,
												"name": "len",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 366,
												"src": "3449:3:0",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											},
											"nodeType": "BinaryOperation",
											"operator": "-",
											"rightExpression": {
												"argumentTypes": null,
												"hexValue": "31",
												"id": 378,
												"isConstant": false,
												"isLValue": false,
												"isPure": true,
												"kind": "number",
												"lValueRequested": false,
												"nodeType": "Literal",
												"src": "3455:1:0",
												"subdenomination": null,
												"typeDescriptions": {
													"typeIdentifier": "t_rational_1_by_1",
													"typeString": "int_const 1"
												},
												"value": "1"
											},
											"src": "3449:7:0",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											}
										},
										"isConstant": false,
										"isLValue": true,
										"isPure": false,
										"lValueRequested": false,
										"nodeType": "IndexAccess",
										"src": "3427:30:0",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"nodeType": "VariableDeclarationStatement",
									"src": "3402:55:0"
								},
								{
									"expression": {
										"argumentTypes": null,
										"id": 391,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"lValueRequested": false,
										"leftHandSide": {
											"argumentTypes": null,
											"baseExpression": {
												"argumentTypes": null,
												"baseExpression": {
													"argumentTypes": null,
													"id": 382,
													"name": "controllers",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 13,
													"src": "3467:11:0",
													"typeDescriptions": {
														"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$",
														"typeString": "mapping(address => address[] storage ref)"
													}
												},
												"id": 388,
												"indexExpression": {
													"argumentTypes": null,
													"id": 383,
													"name": "identity",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 321,
													"src": "3479:8:0",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"isConstant": false,
												"isLValue": true,
												"isPure": false,
												"lValueRequested": false,
												"nodeType": "IndexAccess",
												"src": "3467:21:0",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_address_$dyn_storage",
													"typeString": "address[] storage ref"
												}
											},
											"id": 389,
											"indexExpression": {
												"argumentTypes": null,
												"arguments": [
													{
														"argumentTypes": null,
														"id": 386,
														"name": "controllerIndex",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 352,
														"src": "3494:15:0",
														"typeDescriptions": {
															"typeIdentifier": "t_int256",
															"typeString": "int256"
														}
													}
												],
												"expression": {
													"argumentTypes": [
														{
															"typeIdentifier": "t_int256",
															"typeString": "int256"
														}
													],
													"id": 385,
													"isConstant": false,
													"isLValue": false,
													"isPure": true,
													"lValueRequested": false,
													"nodeType": "ElementaryTypeNameExpression",
													"src": "3489:4:0",
													"typeDescriptions": {
														"typeIdentifier": "t_type$_t_uint256_$",
														"typeString": "type(uint256)"
													},
													"typeName": {
														"id": 384,
														"name": "uint",
														"nodeType": "ElementaryTypeName",
														"src": "3489:4:0",
														"typeDescriptions": {
															"typeIdentifier": null,
															"typeString": null
														}
													}
												},
												"id": 387,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"kind": "typeConversion",
												"lValueRequested": false,
												"names": [],
												"nodeType": "FunctionCall",
												"src": "3489:21:0",
												"tryCall": false,
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											},
											"isConstant": false,
											"isLValue": true,
											"isPure": false,
											"lValueRequested": true,
											"nodeType": "IndexAccess",
											"src": "3467:44:0",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											}
										},
										"nodeType": "Assignment",
										"operator": "=",
										"rightHandSide": {
											"argumentTypes": null,
											"id": 390,
											"name": "lastController",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 373,
											"src": "3514:14:0",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											}
										},
										"src": "3467:61:0",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"id": 392,
									"nodeType": "ExpressionStatement",
									"src": "3467:61:0"
								},
								{
									"condition": {
										"argumentTypes": null,
										"commonType": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										},
										"id": 397,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"lValueRequested": false,
										"leftExpression": {
											"argumentTypes": null,
											"id": 393,
											"name": "lastController",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 373,
											"src": "3542:14:0",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											}
										},
										"nodeType": "BinaryOperation",
										"operator": "==",
										"rightExpression": {
											"argumentTypes": null,
											"arguments": [
												{
													"argumentTypes": null,
													"id": 395,
													"name": "identity",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 321,
													"src": "3579:8:0",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												}
											],
											"expression": {
												"argumentTypes": [
													{
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												],
												"id": 394,
												"name": "identityController",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 169,
												"src": "3560:18:0",
												"typeDescriptions": {
													"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
													"typeString": "function (address) view returns (address)"
												}
											},
											"id": 396,
											"isConstant": false,
											"isLValue": false,
											"isPure": false,
											"kind": "functionCall",
											"lValueRequested": false,
											"names": [],
											"nodeType": "FunctionCall",
											"src": "3560:28:0",
											"tryCall": false,
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											}
										},
										"src": "3542:46:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bool",
											"typeString": "bool"
										}
									},
									"falseBody": null,
									"id": 409,
									"nodeType": "IfStatement",
									"src": "3538:136:0",
									"trueBody": {
										"id": 408,
										"nodeType": "Block",
										"src": "3590:84:0",
										"statements": [
											{
												"expression": {
													"argumentTypes": null,
													"id": 406,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"argumentTypes": null,
														"expression": {
															"argumentTypes": null,
															"baseExpression": {
																"argumentTypes": null,
																"id": 398,
																"name": "configs",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 17,
																"src": "3604:7:0",
																"typeDescriptions": {
																	"typeIdentifier": "t_mapping$_t_address_$_t_struct$_DIDConfig_$1170_storage_$",
																	"typeString": "mapping(address => struct IDIDRegistry.DIDConfig storage ref)"
																}
															},
															"id": 400,
															"indexExpression": {
																"argumentTypes": null,
																"id": 399,
																"name": "identity",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 321,
																"src": "3612:8:0",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"nodeType": "IndexAccess",
															"src": "3604:17:0",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_DIDConfig_$1170_storage",
																"typeString": "struct IDIDRegistry.DIDConfig storage ref"
															}
														},
														"id": 401,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"memberName": "currentController",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 1165,
														"src": "3604:35:0",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"argumentTypes": null,
														"arguments": [
															{
																"argumentTypes": null,
																"id": 404,
																"name": "controllerIndex",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 352,
																"src": "3647:15:0",
																"typeDescriptions": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																}
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																}
															],
															"id": 403,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"nodeType": "ElementaryTypeNameExpression",
															"src": "3642:4:0",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_uint256_$",
																"typeString": "type(uint256)"
															},
															"typeName": {
																"id": 402,
																"name": "uint",
																"nodeType": "ElementaryTypeName",
																"src": "3642:4:0",
																"typeDescriptions": {
																	"typeIdentifier": null,
																	"typeString": null
																}
															}
														},
														"id": 405,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "typeConversion",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "3642:21:0",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "3604:59:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"id": 407,
												"nodeType": "ExpressionStatement",
												"src": "3604:59:0"
											}
										]
									}
								},
								{
									"expression": {
										"argumentTypes": null,
										"id": 417,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"lValueRequested": false,
										"nodeType": "UnaryOperation",
										"operator": "delete",
										"prefix": true,
										"src": "3683:37:0",
										"subExpression": {
											"argumentTypes": null,
											"baseExpression": {
												"argumentTypes": null,
												"baseExpression": {
													"argumentTypes": null,
													"id": 410,
													"name": "controllers",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 13,
													"src": "3690:11:0",
													"typeDescriptions": {
														"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$",
														"typeString": "mapping(address => address[] storage ref)"
													}
												},
												"id": 412,
												"indexExpression": {
													"argumentTypes": null,
													"id": 411,
													"name": "identity",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 321,
													"src": "3702:8:0",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"isConstant": false,
												"isLValue": true,
												"isPure": false,
												"lValueRequested": false,
												"nodeType": "IndexAccess",
												"src": "3690:21:0",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_address_$dyn_storage",
													"typeString": "address[] storage ref"
												}
											},
											"id": 416,
											"indexExpression": {
												"argumentTypes": null,
												"commonType": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"id": 415,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"lValueRequested": false,
												"leftExpression": {
													"argumentTypes": null,
													"id": 413,
													"name": "len",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 366,
													"src": "3712:3:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "BinaryOperation",
												"operator": "-",
												"rightExpression": {
													"argumentTypes": null,
													"hexValue": "31",
													"id": 414,
													"isConstant": false,
													"isLValue": false,
													"isPure": true,
													"kind": "number",
													"lValueRequested": false,
													"nodeType": "Literal",
													"src": "3718:1:0",
													"subdenomination": null,
													"typeDescriptions": {
														"typeIdentifier": "t_rational_1_by_1",
														"typeString": "int_const 1"
													},
													"value": "1"
												},
												"src": "3712:7:0",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											},
											"isConstant": false,
											"isLValue": true,
											"isPure": false,
											"lValueRequested": true,
											"nodeType": "IndexAccess",
											"src": "3690:30:0",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											}
										},
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 418,
									"nodeType": "ExpressionStatement",
									"src": "3683:37:0"
								},
								{
									"expression": {
										"argumentTypes": null,
										"arguments": [],
										"expression": {
											"argumentTypes": [],
											"expression": {
												"argumentTypes": null,
												"baseExpression": {
													"argumentTypes": null,
													"id": 419,
													"name": "controllers",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 13,
													"src": "3730:11:0",
													"typeDescriptions": {
														"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$",
														"typeString": "mapping(address => address[] storage ref)"
													}
												},
												"id": 421,
												"indexExpression": {
													"argumentTypes": null,
													"id": 420,
													"name": "identity",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 321,
													"src": "3742:8:0",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"isConstant": false,
												"isLValue": true,
												"isPure": false,
												"lValueRequested": false,
												"nodeType": "IndexAccess",
												"src": "3730:21:0",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_address_$dyn_storage",
													"typeString": "address[] storage ref"
												}
											},
											"id": 422,
											"isConstant": false,
											"isLValue": false,
											"isPure": false,
											"lValueRequested": false,
											"memberName": "pop",
											"nodeType": "MemberAccess",
											"referencedDeclaration": null,
											"src": "3730:25:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_arraypop_nonpayable$__$returns$__$",
												"typeString": "function ()"
											}
										},
										"id": 423,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "3730:27:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 424,
									"nodeType": "ExpressionStatement",
									"src": "3730:27:0"
								}
							]
						},
						"documentation": null,
						"id": 426,
						"implemented": true,
						"kind": "function",
						"modifiers": [
							{
								"arguments": [
									{
										"argumentTypes": null,
										"id": 328,
										"name": "identity",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"referencedDeclaration": 321,
										"src": "2982:8:0",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									{
										"argumentTypes": null,
										"id": 329,
										"name": "actor",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"referencedDeclaration": 323,
										"src": "2992:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									}
								],
								"id": 330,
								"modifierName": {
									"argumentTypes": null,
									"id": 327,
									"name": "onlyController",
									"nodeType": "Identifier",
									"overloadedDeclarations": [],
									"referencedDeclaration": 53,
									"src": "2967:14:0",
									"typeDescriptions": {
										"typeIdentifier": "t_modifier$_t_address_$_t_address_$",
										"typeString": "modifier (address,address)"
									}
								},
								"nodeType": "ModifierInvocation",
								"src": "2967:31:0"
							}
						],
						"name": "removeController",
						"nodeType": "FunctionDefinition",
						"overrides": null,
						"parameters": {
							"id": 326,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 321,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 426,
									"src": "2905:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 320,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "2905:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 323,
									"mutability": "mutable",
									"name": "actor",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 426,
									"src": "2923:13:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 322,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "2923:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 325,
									"mutability": "mutable",
									"name": "controller",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 426,
									"src": "2938:18:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 324,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "2938:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "2904:53:0"
						},
						"returnParameters": {
							"id": 331,
							"nodeType": "ParameterList",
							"parameters": [],
							"src": "2999:0:0"
						},
						"scope": 894,
						"src": "2879:885:0",
						"stateMutability": "nonpayable",
						"virtual": false,
						"visibility": "internal"
					},
					{
						"body": {
							"id": 481,
							"nodeType": "Block",
							"src": "3893:393:0",
							"statements": [
								{
									"assignments": [
										440
									],
									"declarations": [
										{
											"constant": false,
											"id": 440,
											"mutability": "mutable",
											"name": "controllerIndex",
											"nodeType": "VariableDeclaration",
											"overrides": null,
											"scope": 481,
											"src": "3903:19:0",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_int256",
												"typeString": "int256"
											},
											"typeName": {
												"id": 439,
												"name": "int",
												"nodeType": "ElementaryTypeName",
												"src": "3903:3:0",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												}
											},
											"value": null,
											"visibility": "internal"
										}
									],
									"id": 445,
									"initialValue": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"id": 442,
												"name": "identity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 428,
												"src": "3945:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											{
												"argumentTypes": null,
												"id": 443,
												"name": "newController",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 432,
												"src": "3955:13:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											],
											"id": 441,
											"name": "_getControllerIndex",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 271,
											"src": "3925:19:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_int256_$",
												"typeString": "function (address,address) view returns (int256)"
											}
										},
										"id": 444,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "3925:44:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_int256",
											"typeString": "int256"
										}
									},
									"nodeType": "VariableDeclarationStatement",
									"src": "3903:66:0"
								},
								{
									"expression": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"commonType": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"id": 449,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"lValueRequested": false,
												"leftExpression": {
													"argumentTypes": null,
													"id": 447,
													"name": "controllerIndex",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 440,
													"src": "3989:15:0",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"nodeType": "BinaryOperation",
												"operator": ">=",
												"rightExpression": {
													"argumentTypes": null,
													"hexValue": "30",
													"id": 448,
													"isConstant": false,
													"isLValue": false,
													"isPure": true,
													"kind": "number",
													"lValueRequested": false,
													"nodeType": "Literal",
													"src": "4008:1:0",
													"subdenomination": null,
													"typeDescriptions": {
														"typeIdentifier": "t_rational_0_by_1",
														"typeString": "int_const 0"
													},
													"value": "0"
												},
												"src": "3989:20:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												}
											},
											{
												"argumentTypes": null,
												"hexValue": "436f6e74726f6c6c6572206e6f74206578697374",
												"id": 450,
												"isConstant": false,
												"isLValue": false,
												"isPure": true,
												"kind": "string",
												"lValueRequested": false,
												"nodeType": "Literal",
												"src": "4011:22:0",
												"subdenomination": null,
												"typeDescriptions": {
													"typeIdentifier": "t_stringliteral_8f45c3e8e615970c10ea55ef8ca61495ce88e6bd6ca402e6598a17e3d6bbd722",
													"typeString": "literal_string \"Controller not exist\""
												},
												"value": "Controller not exist"
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												{
													"typeIdentifier": "t_stringliteral_8f45c3e8e615970c10ea55ef8ca61495ce88e6bd6ca402e6598a17e3d6bbd722",
													"typeString": "literal_string \"Controller not exist\""
												}
											],
											"id": 446,
											"name": "require",
											"nodeType": "Identifier",
											"overloadedDeclarations": [
												-18,
												-18
											],
											"referencedDeclaration": -18,
											"src": "3980:7:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
												"typeString": "function (bool,string memory) pure"
											}
										},
										"id": 451,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "3980:55:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 452,
									"nodeType": "ExpressionStatement",
									"src": "3980:55:0"
								},
								{
									"condition": {
										"argumentTypes": null,
										"commonType": {
											"typeIdentifier": "t_int256",
											"typeString": "int256"
										},
										"id": 455,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"lValueRequested": false,
										"leftExpression": {
											"argumentTypes": null,
											"id": 453,
											"name": "controllerIndex",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 440,
											"src": "4050:15:0",
											"typeDescriptions": {
												"typeIdentifier": "t_int256",
												"typeString": "int256"
											}
										},
										"nodeType": "BinaryOperation",
										"operator": ">=",
										"rightExpression": {
											"argumentTypes": null,
											"hexValue": "30",
											"id": 454,
											"isConstant": false,
											"isLValue": false,
											"isPure": true,
											"kind": "number",
											"lValueRequested": false,
											"nodeType": "Literal",
											"src": "4069:1:0",
											"subdenomination": null,
											"typeDescriptions": {
												"typeIdentifier": "t_rational_0_by_1",
												"typeString": "int_const 0"
											},
											"value": "0"
										},
										"src": "4050:20:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bool",
											"typeString": "bool"
										}
									},
									"falseBody": null,
									"id": 480,
									"nodeType": "IfStatement",
									"src": "4046:234:0",
									"trueBody": {
										"id": 479,
										"nodeType": "Block",
										"src": "4072:208:0",
										"statements": [
											{
												"expression": {
													"argumentTypes": null,
													"arguments": [
														{
															"argumentTypes": null,
															"id": 457,
															"name": "identity",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 428,
															"src": "4107:8:0",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"argumentTypes": null,
															"arguments": [
																{
																	"argumentTypes": null,
																	"id": 460,
																	"name": "controllerIndex",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 440,
																	"src": "4122:15:0",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																],
																"id": 459,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"nodeType": "ElementaryTypeNameExpression",
																"src": "4117:4:0",
																"typeDescriptions": {
																	"typeIdentifier": "t_type$_t_uint256_$",
																	"typeString": "type(uint256)"
																},
																"typeName": {
																	"id": 458,
																	"name": "uint",
																	"nodeType": "ElementaryTypeName",
																	"src": "4117:4:0",
																	"typeDescriptions": {
																		"typeIdentifier": null,
																		"typeString": null
																	}
																}
															},
															"id": 461,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "typeConversion",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "4117:21:0",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 456,
														"name": "setCurrentController",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 229,
														"src": "4086:20:0",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
															"typeString": "function (address,uint256)"
														}
													},
													"id": 462,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "4086:53:0",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 463,
												"nodeType": "ExpressionStatement",
												"src": "4086:53:0"
											},
											{
												"eventCall": {
													"argumentTypes": null,
													"arguments": [
														{
															"argumentTypes": null,
															"id": 465,
															"name": "identity",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 428,
															"src": "4180:8:0",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"argumentTypes": null,
															"id": 466,
															"name": "newController",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 432,
															"src": "4190:13:0",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"argumentTypes": null,
															"baseExpression": {
																"argumentTypes": null,
																"id": 467,
																"name": "changed",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 21,
																"src": "4205:7:0",
																"typeDescriptions": {
																	"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
																	"typeString": "mapping(address => uint256)"
																}
															},
															"id": 469,
															"indexExpression": {
																"argumentTypes": null,
																"id": 468,
																"name": "identity",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 428,
																"src": "4213:8:0",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"nodeType": "IndexAccess",
															"src": "4205:17:0",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 464,
														"name": "DIDControllerChanged",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1178,
														"src": "4159:20:0",
														"typeDescriptions": {
															"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
															"typeString": "function (address,address,uint256)"
														}
													},
													"id": 470,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "4159:64:0",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 471,
												"nodeType": "EmitStatement",
												"src": "4154:69:0"
											},
											{
												"expression": {
													"argumentTypes": null,
													"id": 477,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"argumentTypes": null,
														"baseExpression": {
															"argumentTypes": null,
															"id": 472,
															"name": "changed",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 21,
															"src": "4237:7:0",
															"typeDescriptions": {
																"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
																"typeString": "mapping(address => uint256)"
															}
														},
														"id": 474,
														"indexExpression": {
															"argumentTypes": null,
															"id": 473,
															"name": "identity",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 428,
															"src": "4245:8:0",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"nodeType": "IndexAccess",
														"src": "4237:17:0",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"argumentTypes": null,
														"expression": {
															"argumentTypes": null,
															"id": 475,
															"name": "block",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": -4,
															"src": "4257:5:0",
															"typeDescriptions": {
																"typeIdentifier": "t_magic_block",
																"typeString": "block"
															}
														},
														"id": 476,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "number",
														"nodeType": "MemberAccess",
														"referencedDeclaration": null,
														"src": "4257:12:0",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "4237:32:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"id": 478,
												"nodeType": "ExpressionStatement",
												"src": "4237:32:0"
											}
										]
									}
								}
							]
						},
						"documentation": null,
						"id": 482,
						"implemented": true,
						"kind": "function",
						"modifiers": [
							{
								"arguments": [
									{
										"argumentTypes": null,
										"id": 435,
										"name": "identity",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"referencedDeclaration": 428,
										"src": "3876:8:0",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									{
										"argumentTypes": null,
										"id": 436,
										"name": "actor",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"referencedDeclaration": 430,
										"src": "3886:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									}
								],
								"id": 437,
								"modifierName": {
									"argumentTypes": null,
									"id": 434,
									"name": "onlyController",
									"nodeType": "Identifier",
									"overloadedDeclarations": [],
									"referencedDeclaration": 53,
									"src": "3861:14:0",
									"typeDescriptions": {
										"typeIdentifier": "t_modifier$_t_address_$_t_address_$",
										"typeString": "modifier (address,address)"
									}
								},
								"nodeType": "ModifierInvocation",
								"src": "3861:31:0"
							}
						],
						"name": "changeController",
						"nodeType": "FunctionDefinition",
						"overrides": null,
						"parameters": {
							"id": 433,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 428,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 482,
									"src": "3796:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 427,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "3796:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 430,
									"mutability": "mutable",
									"name": "actor",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 482,
									"src": "3814:13:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 429,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "3814:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 432,
									"mutability": "mutable",
									"name": "newController",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 482,
									"src": "3829:21:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 431,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "3829:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "3795:56:0"
						},
						"returnParameters": {
							"id": 438,
							"nodeType": "ParameterList",
							"parameters": [],
							"src": "3893:0:0"
						},
						"scope": 894,
						"src": "3770:516:0",
						"stateMutability": "nonpayable",
						"virtual": false,
						"visibility": "internal"
					},
					{
						"body": {
							"id": 516,
							"nodeType": "Block",
							"src": "4415:215:0",
							"statements": [
								{
									"expression": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"commonType": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"id": 498,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"lValueRequested": false,
												"leftExpression": {
													"argumentTypes": null,
													"id": 496,
													"name": "keyRotationTime",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 488,
													"src": "4434:15:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "BinaryOperation",
												"operator": ">=",
												"rightExpression": {
													"argumentTypes": null,
													"id": 497,
													"name": "minKeyRotationTime",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 27,
													"src": "4453:18:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"src": "4434:37:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												}
											},
											{
												"argumentTypes": null,
												"hexValue": "496e76616c6964206d696e696d756d206b657920726f746174696f6e2074696d65",
												"id": 499,
												"isConstant": false,
												"isLValue": false,
												"isPure": true,
												"kind": "string",
												"lValueRequested": false,
												"nodeType": "Literal",
												"src": "4473:35:0",
												"subdenomination": null,
												"typeDescriptions": {
													"typeIdentifier": "t_stringliteral_781efa70fa92cea6893ee0831278329342a7184d8a32e13e4cef4639f4c01341",
													"typeString": "literal_string \"Invalid minimum key rotation time\""
												},
												"value": "Invalid minimum key rotation time"
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												{
													"typeIdentifier": "t_stringliteral_781efa70fa92cea6893ee0831278329342a7184d8a32e13e4cef4639f4c01341",
													"typeString": "literal_string \"Invalid minimum key rotation time\""
												}
											],
											"id": 495,
											"name": "require",
											"nodeType": "Identifier",
											"overloadedDeclarations": [
												-18,
												-18
											],
											"referencedDeclaration": -18,
											"src": "4425:7:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
												"typeString": "function (bool,string memory) pure"
											}
										},
										"id": 500,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "4425:85:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 501,
									"nodeType": "ExpressionStatement",
									"src": "4425:85:0"
								},
								{
									"expression": {
										"argumentTypes": null,
										"id": 507,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"lValueRequested": false,
										"leftHandSide": {
											"argumentTypes": null,
											"expression": {
												"argumentTypes": null,
												"baseExpression": {
													"argumentTypes": null,
													"id": 502,
													"name": "configs",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 17,
													"src": "4520:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_mapping$_t_address_$_t_struct$_DIDConfig_$1170_storage_$",
														"typeString": "mapping(address => struct IDIDRegistry.DIDConfig storage ref)"
													}
												},
												"id": 504,
												"indexExpression": {
													"argumentTypes": null,
													"id": 503,
													"name": "identity",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 484,
													"src": "4528:8:0",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"isConstant": false,
												"isLValue": true,
												"isPure": false,
												"lValueRequested": false,
												"nodeType": "IndexAccess",
												"src": "4520:17:0",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_DIDConfig_$1170_storage",
													"typeString": "struct IDIDRegistry.DIDConfig storage ref"
												}
											},
											"id": 505,
											"isConstant": false,
											"isLValue": true,
											"isPure": false,
											"lValueRequested": true,
											"memberName": "automaticRotation",
											"nodeType": "MemberAccess",
											"referencedDeclaration": 1167,
											"src": "4520:35:0",
											"typeDescriptions": {
												"typeIdentifier": "t_bool",
												"typeString": "bool"
											}
										},
										"nodeType": "Assignment",
										"operator": "=",
										"rightHandSide": {
											"argumentTypes": null,
											"hexValue": "74727565",
											"id": 506,
											"isConstant": false,
											"isLValue": false,
											"isPure": true,
											"kind": "bool",
											"lValueRequested": false,
											"nodeType": "Literal",
											"src": "4558:4:0",
											"subdenomination": null,
											"typeDescriptions": {
												"typeIdentifier": "t_bool",
												"typeString": "bool"
											},
											"value": "true"
										},
										"src": "4520:42:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bool",
											"typeString": "bool"
										}
									},
									"id": 508,
									"nodeType": "ExpressionStatement",
									"src": "4520:42:0"
								},
								{
									"expression": {
										"argumentTypes": null,
										"id": 514,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"lValueRequested": false,
										"leftHandSide": {
											"argumentTypes": null,
											"expression": {
												"argumentTypes": null,
												"baseExpression": {
													"argumentTypes": null,
													"id": 509,
													"name": "configs",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 17,
													"src": "4572:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_mapping$_t_address_$_t_struct$_DIDConfig_$1170_storage_$",
														"typeString": "mapping(address => struct IDIDRegistry.DIDConfig storage ref)"
													}
												},
												"id": 511,
												"indexExpression": {
													"argumentTypes": null,
													"id": 510,
													"name": "identity",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 484,
													"src": "4580:8:0",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"isConstant": false,
												"isLValue": true,
												"isPure": false,
												"lValueRequested": false,
												"nodeType": "IndexAccess",
												"src": "4572:17:0",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_DIDConfig_$1170_storage",
													"typeString": "struct IDIDRegistry.DIDConfig storage ref"
												}
											},
											"id": 512,
											"isConstant": false,
											"isLValue": true,
											"isPure": false,
											"lValueRequested": true,
											"memberName": "keyRotationTime",
											"nodeType": "MemberAccess",
											"referencedDeclaration": 1169,
											"src": "4572:33:0",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											}
										},
										"nodeType": "Assignment",
										"operator": "=",
										"rightHandSide": {
											"argumentTypes": null,
											"id": 513,
											"name": "keyRotationTime",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 488,
											"src": "4608:15:0",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											}
										},
										"src": "4572:51:0",
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									},
									"id": 515,
									"nodeType": "ExpressionStatement",
									"src": "4572:51:0"
								}
							]
						},
						"documentation": null,
						"id": 517,
						"implemented": true,
						"kind": "function",
						"modifiers": [
							{
								"arguments": [
									{
										"argumentTypes": null,
										"id": 491,
										"name": "identity",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"referencedDeclaration": 484,
										"src": "4398:8:0",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									{
										"argumentTypes": null,
										"id": 492,
										"name": "actor",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"referencedDeclaration": 486,
										"src": "4408:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									}
								],
								"id": 493,
								"modifierName": {
									"argumentTypes": null,
									"id": 490,
									"name": "onlyController",
									"nodeType": "Identifier",
									"overloadedDeclarations": [],
									"referencedDeclaration": 53,
									"src": "4383:14:0",
									"typeDescriptions": {
										"typeIdentifier": "t_modifier$_t_address_$_t_address_$",
										"typeString": "modifier (address,address)"
									}
								},
								"nodeType": "ModifierInvocation",
								"src": "4383:31:0"
							}
						],
						"name": "enableKeyRotation",
						"nodeType": "FunctionDefinition",
						"overrides": null,
						"parameters": {
							"id": 489,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 484,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 517,
									"src": "4319:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 483,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "4319:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 486,
									"mutability": "mutable",
									"name": "actor",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 517,
									"src": "4337:13:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 485,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "4337:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 488,
									"mutability": "mutable",
									"name": "keyRotationTime",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 517,
									"src": "4352:20:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_uint256",
										"typeString": "uint256"
									},
									"typeName": {
										"id": 487,
										"name": "uint",
										"nodeType": "ElementaryTypeName",
										"src": "4352:4:0",
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "4318:55:0"
						},
						"returnParameters": {
							"id": 494,
							"nodeType": "ParameterList",
							"parameters": [],
							"src": "4415:0:0"
						},
						"scope": 894,
						"src": "4292:338:0",
						"stateMutability": "nonpayable",
						"virtual": false,
						"visibility": "internal"
					},
					{
						"body": {
							"id": 535,
							"nodeType": "Block",
							"src": "4738:60:0",
							"statements": [
								{
									"expression": {
										"argumentTypes": null,
										"id": 533,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"lValueRequested": false,
										"leftHandSide": {
											"argumentTypes": null,
											"expression": {
												"argumentTypes": null,
												"baseExpression": {
													"argumentTypes": null,
													"id": 528,
													"name": "configs",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 17,
													"src": "4748:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_mapping$_t_address_$_t_struct$_DIDConfig_$1170_storage_$",
														"typeString": "mapping(address => struct IDIDRegistry.DIDConfig storage ref)"
													}
												},
												"id": 530,
												"indexExpression": {
													"argumentTypes": null,
													"id": 529,
													"name": "identity",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 519,
													"src": "4756:8:0",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"isConstant": false,
												"isLValue": true,
												"isPure": false,
												"lValueRequested": false,
												"nodeType": "IndexAccess",
												"src": "4748:17:0",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_DIDConfig_$1170_storage",
													"typeString": "struct IDIDRegistry.DIDConfig storage ref"
												}
											},
											"id": 531,
											"isConstant": false,
											"isLValue": true,
											"isPure": false,
											"lValueRequested": true,
											"memberName": "automaticRotation",
											"nodeType": "MemberAccess",
											"referencedDeclaration": 1167,
											"src": "4748:35:0",
											"typeDescriptions": {
												"typeIdentifier": "t_bool",
												"typeString": "bool"
											}
										},
										"nodeType": "Assignment",
										"operator": "=",
										"rightHandSide": {
											"argumentTypes": null,
											"hexValue": "66616c7365",
											"id": 532,
											"isConstant": false,
											"isLValue": false,
											"isPure": true,
											"kind": "bool",
											"lValueRequested": false,
											"nodeType": "Literal",
											"src": "4786:5:0",
											"subdenomination": null,
											"typeDescriptions": {
												"typeIdentifier": "t_bool",
												"typeString": "bool"
											},
											"value": "false"
										},
										"src": "4748:43:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bool",
											"typeString": "bool"
										}
									},
									"id": 534,
									"nodeType": "ExpressionStatement",
									"src": "4748:43:0"
								}
							]
						},
						"documentation": null,
						"id": 536,
						"implemented": true,
						"kind": "function",
						"modifiers": [
							{
								"arguments": [
									{
										"argumentTypes": null,
										"id": 524,
										"name": "identity",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"referencedDeclaration": 519,
										"src": "4721:8:0",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									{
										"argumentTypes": null,
										"id": 525,
										"name": "actor",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"referencedDeclaration": 521,
										"src": "4731:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									}
								],
								"id": 526,
								"modifierName": {
									"argumentTypes": null,
									"id": 523,
									"name": "onlyController",
									"nodeType": "Identifier",
									"overloadedDeclarations": [],
									"referencedDeclaration": 53,
									"src": "4706:14:0",
									"typeDescriptions": {
										"typeIdentifier": "t_modifier$_t_address_$_t_address_$",
										"typeString": "modifier (address,address)"
									}
								},
								"nodeType": "ModifierInvocation",
								"src": "4706:31:0"
							}
						],
						"name": "disableKeyRotation",
						"nodeType": "FunctionDefinition",
						"overrides": null,
						"parameters": {
							"id": 522,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 519,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 536,
									"src": "4664:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 518,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "4664:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 521,
									"mutability": "mutable",
									"name": "actor",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 536,
									"src": "4682:13:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 520,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "4682:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "4663:33:0"
						},
						"returnParameters": {
							"id": 527,
							"nodeType": "ParameterList",
							"parameters": [],
							"src": "4738:0:0"
						},
						"scope": 894,
						"src": "4636:162:0",
						"stateMutability": "nonpayable",
						"virtual": false,
						"visibility": "internal"
					},
					{
						"baseFunctions": [
							1197
						],
						"body": {
							"id": 551,
							"nodeType": "Block",
							"src": "4883:64:0",
							"statements": [
								{
									"expression": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"id": 545,
												"name": "identity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 538,
												"src": "4907:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											{
												"argumentTypes": null,
												"expression": {
													"argumentTypes": null,
													"id": 546,
													"name": "msg",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": -15,
													"src": "4917:3:0",
													"typeDescriptions": {
														"typeIdentifier": "t_magic_message",
														"typeString": "msg"
													}
												},
												"id": 547,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"lValueRequested": false,
												"memberName": "sender",
												"nodeType": "MemberAccess",
												"referencedDeclaration": null,
												"src": "4917:10:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address_payable",
													"typeString": "address payable"
												}
											},
											{
												"argumentTypes": null,
												"id": 548,
												"name": "controller",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 540,
												"src": "4929:10:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												{
													"typeIdentifier": "t_address_payable",
													"typeString": "address payable"
												},
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											],
											"id": 544,
											"name": "addController",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 319,
											"src": "4893:13:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
												"typeString": "function (address,address,address)"
											}
										},
										"id": 549,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "4893:47:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 550,
									"nodeType": "ExpressionStatement",
									"src": "4893:47:0"
								}
							]
						},
						"documentation": null,
						"functionSelector": "00bb9412",
						"id": 552,
						"implemented": true,
						"kind": "function",
						"modifiers": [],
						"name": "addController",
						"nodeType": "FunctionDefinition",
						"overrides": {
							"id": 542,
							"nodeType": "OverrideSpecifier",
							"overrides": [],
							"src": "4874:8:0"
						},
						"parameters": {
							"id": 541,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 538,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 552,
									"src": "4827:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 537,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "4827:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 540,
									"mutability": "mutable",
									"name": "controller",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 552,
									"src": "4845:18:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 539,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "4845:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "4826:38:0"
						},
						"returnParameters": {
							"id": 543,
							"nodeType": "ParameterList",
							"parameters": [],
							"src": "4883:0:0"
						},
						"scope": 894,
						"src": "4804:143:0",
						"stateMutability": "nonpayable",
						"virtual": false,
						"visibility": "external"
					},
					{
						"baseFunctions": [
							1204
						],
						"body": {
							"id": 567,
							"nodeType": "Block",
							"src": "5035:67:0",
							"statements": [
								{
									"expression": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"id": 561,
												"name": "identity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 554,
												"src": "5062:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											{
												"argumentTypes": null,
												"expression": {
													"argumentTypes": null,
													"id": 562,
													"name": "msg",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": -15,
													"src": "5072:3:0",
													"typeDescriptions": {
														"typeIdentifier": "t_magic_message",
														"typeString": "msg"
													}
												},
												"id": 563,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"lValueRequested": false,
												"memberName": "sender",
												"nodeType": "MemberAccess",
												"referencedDeclaration": null,
												"src": "5072:10:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address_payable",
													"typeString": "address payable"
												}
											},
											{
												"argumentTypes": null,
												"id": 564,
												"name": "controller",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 556,
												"src": "5084:10:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												{
													"typeIdentifier": "t_address_payable",
													"typeString": "address payable"
												},
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											],
											"id": 560,
											"name": "removeController",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 426,
											"src": "5045:16:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
												"typeString": "function (address,address,address)"
											}
										},
										"id": 565,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "5045:50:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 566,
									"nodeType": "ExpressionStatement",
									"src": "5045:50:0"
								}
							]
						},
						"documentation": null,
						"functionSelector": "2bb88442",
						"id": 568,
						"implemented": true,
						"kind": "function",
						"modifiers": [],
						"name": "removeController",
						"nodeType": "FunctionDefinition",
						"overrides": {
							"id": 558,
							"nodeType": "OverrideSpecifier",
							"overrides": [],
							"src": "5026:8:0"
						},
						"parameters": {
							"id": 557,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 554,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 568,
									"src": "4979:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 553,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "4979:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 556,
									"mutability": "mutable",
									"name": "controller",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 568,
									"src": "4997:18:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 555,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "4997:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "4978:38:0"
						},
						"returnParameters": {
							"id": 559,
							"nodeType": "ParameterList",
							"parameters": [],
							"src": "5035:0:0"
						},
						"scope": 894,
						"src": "4953:149:0",
						"stateMutability": "nonpayable",
						"virtual": false,
						"visibility": "external"
					},
					{
						"baseFunctions": [
							1211
						],
						"body": {
							"id": 583,
							"nodeType": "Block",
							"src": "5193:70:0",
							"statements": [
								{
									"expression": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"id": 577,
												"name": "identity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 570,
												"src": "5220:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											{
												"argumentTypes": null,
												"expression": {
													"argumentTypes": null,
													"id": 578,
													"name": "msg",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": -15,
													"src": "5230:3:0",
													"typeDescriptions": {
														"typeIdentifier": "t_magic_message",
														"typeString": "msg"
													}
												},
												"id": 579,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"lValueRequested": false,
												"memberName": "sender",
												"nodeType": "MemberAccess",
												"referencedDeclaration": null,
												"src": "5230:10:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address_payable",
													"typeString": "address payable"
												}
											},
											{
												"argumentTypes": null,
												"id": 580,
												"name": "newController",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 572,
												"src": "5242:13:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												{
													"typeIdentifier": "t_address_payable",
													"typeString": "address payable"
												},
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											],
											"id": 576,
											"name": "changeController",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 482,
											"src": "5203:16:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
												"typeString": "function (address,address,address)"
											}
										},
										"id": 581,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "5203:53:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 582,
									"nodeType": "ExpressionStatement",
									"src": "5203:53:0"
								}
							]
						},
						"documentation": null,
						"functionSelector": "3e11e378",
						"id": 584,
						"implemented": true,
						"kind": "function",
						"modifiers": [],
						"name": "changeController",
						"nodeType": "FunctionDefinition",
						"overrides": {
							"id": 574,
							"nodeType": "OverrideSpecifier",
							"overrides": [],
							"src": "5184:8:0"
						},
						"parameters": {
							"id": 573,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 570,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 584,
									"src": "5134:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 569,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "5134:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 572,
									"mutability": "mutable",
									"name": "newController",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 584,
									"src": "5152:21:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 571,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "5152:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "5133:41:0"
						},
						"returnParameters": {
							"id": 575,
							"nodeType": "ParameterList",
							"parameters": [],
							"src": "5193:0:0"
						},
						"scope": 894,
						"src": "5108:155:0",
						"stateMutability": "nonpayable",
						"virtual": false,
						"visibility": "external"
					},
					{
						"baseFunctions": [
							1224
						],
						"body": {
							"id": 635,
							"nodeType": "Block",
							"src": "5400:269:0",
							"statements": [
								{
									"assignments": [
										599
									],
									"declarations": [
										{
											"constant": false,
											"id": 599,
											"mutability": "mutable",
											"name": "hash",
											"nodeType": "VariableDeclaration",
											"overrides": null,
											"scope": 635,
											"src": "5410:12:0",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_bytes32",
												"typeString": "bytes32"
											},
											"typeName": {
												"id": 598,
												"name": "bytes32",
												"nodeType": "ElementaryTypeName",
												"src": "5410:7:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												}
											},
											"value": null,
											"visibility": "internal"
										}
									],
									"id": 622,
									"initialValue": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"arguments": [
													{
														"argumentTypes": null,
														"arguments": [
															{
																"argumentTypes": null,
																"hexValue": "30783139",
																"id": 605,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "5457:4:0",
																"subdenomination": null,
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_25_by_1",
																	"typeString": "int_const 25"
																},
																"value": "0x19"
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_rational_25_by_1",
																	"typeString": "int_const 25"
																}
															],
															"id": 604,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"nodeType": "ElementaryTypeNameExpression",
															"src": "5452:4:0",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_bytes1_$",
																"typeString": "type(bytes1)"
															},
															"typeName": {
																"id": 603,
																"name": "byte",
																"nodeType": "ElementaryTypeName",
																"src": "5452:4:0",
																"typeDescriptions": {
																	"typeIdentifier": null,
																	"typeString": null
																}
															}
														},
														"id": 606,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "typeConversion",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "5452:10:0",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_bytes1",
															"typeString": "bytes1"
														}
													},
													{
														"argumentTypes": null,
														"arguments": [
															{
																"argumentTypes": null,
																"hexValue": "30",
																"id": 609,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "5469:1:0",
																"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": 608,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"nodeType": "ElementaryTypeNameExpression",
															"src": "5464:4:0",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_bytes1_$",
																"typeString": "type(bytes1)"
															},
															"typeName": {
																"id": 607,
																"name": "byte",
																"nodeType": "ElementaryTypeName",
																"src": "5464:4:0",
																"typeDescriptions": {
																	"typeIdentifier": null,
																	"typeString": null
																}
															}
														},
														"id": 610,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "typeConversion",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "5464:7:0",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_bytes1",
															"typeString": "bytes1"
														}
													},
													{
														"argumentTypes": null,
														"id": 611,
														"name": "this",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": -28,
														"src": "5473:4:0",
														"typeDescriptions": {
															"typeIdentifier": "t_contract$_DIDRegistry_$894",
															"typeString": "contract DIDRegistry"
														}
													},
													{
														"argumentTypes": null,
														"baseExpression": {
															"argumentTypes": null,
															"id": 612,
															"name": "nonce",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 25,
															"src": "5479:5:0",
															"typeDescriptions": {
																"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
																"typeString": "mapping(address => uint256)"
															}
														},
														"id": 616,
														"indexExpression": {
															"argumentTypes": null,
															"arguments": [
																{
																	"argumentTypes": null,
																	"id": 614,
																	"name": "identity",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 586,
																	"src": "5504:8:0",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																],
																"id": 613,
																"name": "identityController",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 169,
																"src": "5485:18:0",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
																	"typeString": "function (address) view returns (address)"
																}
															},
															"id": 615,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "5485:28:0",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "IndexAccess",
														"src": "5479:35:0",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													{
														"argumentTypes": null,
														"id": 617,
														"name": "identity",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 586,
														"src": "5516:8:0",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													{
														"argumentTypes": null,
														"hexValue": "6368616e6765436f6e74726f6c6c6572",
														"id": 618,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "string",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "5526:18:0",
														"subdenomination": null,
														"typeDescriptions": {
															"typeIdentifier": "t_stringliteral_788119bad6022548d5b9b4c51c7379a940716c7599154a8034465d12626cd6ae",
															"typeString": "literal_string \"changeController\""
														},
														"value": "changeController"
													},
													{
														"argumentTypes": null,
														"id": 619,
														"name": "newController",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 594,
														"src": "5546:13:0",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													}
												],
												"expression": {
													"argumentTypes": [
														{
															"typeIdentifier": "t_bytes1",
															"typeString": "bytes1"
														},
														{
															"typeIdentifier": "t_bytes1",
															"typeString": "bytes1"
														},
														{
															"typeIdentifier": "t_contract$_DIDRegistry_$894",
															"typeString": "contract DIDRegistry"
														},
														{
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														{
															"typeIdentifier": "t_address",
															"typeString": "address"
														},
														{
															"typeIdentifier": "t_stringliteral_788119bad6022548d5b9b4c51c7379a940716c7599154a8034465d12626cd6ae",
															"typeString": "literal_string \"changeController\""
														},
														{
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													],
													"expression": {
														"argumentTypes": null,
														"id": 601,
														"name": "abi",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": -1,
														"src": "5435:3:0",
														"typeDescriptions": {
															"typeIdentifier": "t_magic_abi",
															"typeString": "abi"
														}
													},
													"id": 602,
													"isConstant": false,
													"isLValue": false,
													"isPure": true,
													"lValueRequested": false,
													"memberName": "encodePacked",
													"nodeType": "MemberAccess",
													"referencedDeclaration": null,
													"src": "5435:16:0",
													"typeDescriptions": {
														"typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
														"typeString": "function () pure returns (bytes memory)"
													}
												},
												"id": 620,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"kind": "functionCall",
												"lValueRequested": false,
												"names": [],
												"nodeType": "FunctionCall",
												"src": "5435:125:0",
												"tryCall": false,
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												}
											],
											"id": 600,
											"name": "keccak256",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": -8,
											"src": "5425:9:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
												"typeString": "function (bytes memory) pure returns (bytes32)"
											}
										},
										"id": 621,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "5425:136:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_bytes32",
											"typeString": "bytes32"
										}
									},
									"nodeType": "VariableDeclarationStatement",
									"src": "5410:151:0"
								},
								{
									"expression": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"id": 624,
												"name": "identity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 586,
												"src": "5588:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											{
												"argumentTypes": null,
												"arguments": [
													{
														"argumentTypes": null,
														"id": 626,
														"name": "identity",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 586,
														"src": "5613:8:0",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													{
														"argumentTypes": null,
														"id": 627,
														"name": "sigV",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 588,
														"src": "5623:4:0",
														"typeDescriptions": {
															"typeIdentifier": "t_uint8",
															"typeString": "uint8"
														}
													},
													{
														"argumentTypes": null,
														"id": 628,
														"name": "sigR",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 590,
														"src": "5629:4:0",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														}
													},
													{
														"argumentTypes": null,
														"id": 629,
														"name": "sigS",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 592,
														"src": "5635:4:0",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														}
													},
													{
														"argumentTypes": null,
														"id": 630,
														"name": "hash",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 599,
														"src": "5641:4:0",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														}
													}
												],
												"expression": {
													"argumentTypes": [
														{
															"typeIdentifier": "t_address",
															"typeString": "address"
														},
														{
															"typeIdentifier": "t_uint8",
															"typeString": "uint8"
														},
														{
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														},
														{
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														},
														{
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														}
													],
													"id": 625,
													"name": "checkSignature",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 209,
													"src": "5598:14:0",
													"typeDescriptions": {
														"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint8_$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
														"typeString": "function (address,uint8,bytes32,bytes32,bytes32) returns (address)"
													}
												},
												"id": 631,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"kind": "functionCall",
												"lValueRequested": false,
												"names": [],
												"nodeType": "FunctionCall",
												"src": "5598:48:0",
												"tryCall": false,
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											{
												"argumentTypes": null,
												"id": 632,
												"name": "newController",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 594,
												"src": "5648:13:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											],
											"id": 623,
											"name": "changeController",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 482,
											"src": "5571:16:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
												"typeString": "function (address,address,address)"
											}
										},
										"id": 633,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "5571:91:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 634,
									"nodeType": "ExpressionStatement",
									"src": "5571:91:0"
								}
							]
						},
						"documentation": null,
						"functionSelector": "4303951b",
						"id": 636,
						"implemented": true,
						"kind": "function",
						"modifiers": [],
						"name": "changeControllerSigned",
						"nodeType": "FunctionDefinition",
						"overrides": {
							"id": 596,
							"nodeType": "OverrideSpecifier",
							"overrides": [],
							"src": "5391:8:0"
						},
						"parameters": {
							"id": 595,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 586,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 636,
									"src": "5301:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 585,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "5301:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 588,
									"mutability": "mutable",
									"name": "sigV",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 636,
									"src": "5319:10:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_uint8",
										"typeString": "uint8"
									},
									"typeName": {
										"id": 587,
										"name": "uint8",
										"nodeType": "ElementaryTypeName",
										"src": "5319:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_uint8",
											"typeString": "uint8"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 590,
									"mutability": "mutable",
									"name": "sigR",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 636,
									"src": "5331:12:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes32",
										"typeString": "bytes32"
									},
									"typeName": {
										"id": 589,
										"name": "bytes32",
										"nodeType": "ElementaryTypeName",
										"src": "5331:7:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes32",
											"typeString": "bytes32"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 592,
									"mutability": "mutable",
									"name": "sigS",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 636,
									"src": "5345:12:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes32",
										"typeString": "bytes32"
									},
									"typeName": {
										"id": 591,
										"name": "bytes32",
										"nodeType": "ElementaryTypeName",
										"src": "5345:7:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes32",
											"typeString": "bytes32"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 594,
									"mutability": "mutable",
									"name": "newController",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 636,
									"src": "5359:21:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 593,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "5359:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "5300:81:0"
						},
						"returnParameters": {
							"id": 597,
							"nodeType": "ParameterList",
							"parameters": [],
							"src": "5400:0:0"
						},
						"scope": 894,
						"src": "5269:400:0",
						"stateMutability": "nonpayable",
						"virtual": false,
						"visibility": "external"
					},
					{
						"body": {
							"id": 673,
							"nodeType": "Block",
							"src": "5825:153:0",
							"statements": [
								{
									"eventCall": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"id": 654,
												"name": "identity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 638,
												"src": "5860:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											{
												"argumentTypes": null,
												"id": 655,
												"name": "name",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 642,
												"src": "5870:4:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												}
											},
											{
												"argumentTypes": null,
												"id": 656,
												"name": "value",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 644,
												"src": "5876:5:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												}
											},
											{
												"argumentTypes": null,
												"commonType": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"id": 660,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"lValueRequested": false,
												"leftExpression": {
													"argumentTypes": null,
													"expression": {
														"argumentTypes": null,
														"id": 657,
														"name": "block",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": -4,
														"src": "5883:5:0",
														"typeDescriptions": {
															"typeIdentifier": "t_magic_block",
															"typeString": "block"
														}
													},
													"id": 658,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"memberName": "timestamp",
													"nodeType": "MemberAccess",
													"referencedDeclaration": null,
													"src": "5883:15:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "BinaryOperation",
												"operator": "+",
												"rightExpression": {
													"argumentTypes": null,
													"id": 659,
													"name": "validity",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 646,
													"src": "5901:8:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"src": "5883:26:0",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											},
											{
												"argumentTypes": null,
												"baseExpression": {
													"argumentTypes": null,
													"id": 661,
													"name": "changed",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 21,
													"src": "5911:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
														"typeString": "mapping(address => uint256)"
													}
												},
												"id": 663,
												"indexExpression": {
													"argumentTypes": null,
													"id": 662,
													"name": "identity",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 638,
													"src": "5919:8:0",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"isConstant": false,
												"isLValue": true,
												"isPure": false,
												"lValueRequested": false,
												"nodeType": "IndexAccess",
												"src": "5911:17:0",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												{
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												},
												{
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												},
												{
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												{
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											],
											"id": 653,
											"name": "DIDAttributeChanged",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 1190,
											"src": "5840:19:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
												"typeString": "function (address,bytes memory,bytes memory,uint256,uint256)"
											}
										},
										"id": 664,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "5840:89:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 665,
									"nodeType": "EmitStatement",
									"src": "5835:94:0"
								},
								{
									"expression": {
										"argumentTypes": null,
										"id": 671,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"lValueRequested": false,
										"leftHandSide": {
											"argumentTypes": null,
											"baseExpression": {
												"argumentTypes": null,
												"id": 666,
												"name": "changed",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 21,
												"src": "5939:7:0",
												"typeDescriptions": {
													"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
													"typeString": "mapping(address => uint256)"
												}
											},
											"id": 668,
											"indexExpression": {
												"argumentTypes": null,
												"id": 667,
												"name": "identity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 638,
												"src": "5947:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											"isConstant": false,
											"isLValue": true,
											"isPure": false,
											"lValueRequested": true,
											"nodeType": "IndexAccess",
											"src": "5939:17:0",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											}
										},
										"nodeType": "Assignment",
										"operator": "=",
										"rightHandSide": {
											"argumentTypes": null,
											"expression": {
												"argumentTypes": null,
												"id": 669,
												"name": "block",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": -4,
												"src": "5959:5:0",
												"typeDescriptions": {
													"typeIdentifier": "t_magic_block",
													"typeString": "block"
												}
											},
											"id": 670,
											"isConstant": false,
											"isLValue": false,
											"isPure": false,
											"lValueRequested": false,
											"memberName": "number",
											"nodeType": "MemberAccess",
											"referencedDeclaration": null,
											"src": "5959:12:0",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											}
										},
										"src": "5939:32:0",
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									},
									"id": 672,
									"nodeType": "ExpressionStatement",
									"src": "5939:32:0"
								}
							]
						},
						"documentation": null,
						"id": 674,
						"implemented": true,
						"kind": "function",
						"modifiers": [
							{
								"arguments": [
									{
										"argumentTypes": null,
										"id": 649,
										"name": "identity",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"referencedDeclaration": 638,
										"src": "5808:8:0",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									{
										"argumentTypes": null,
										"id": 650,
										"name": "actor",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"referencedDeclaration": 640,
										"src": "5818:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									}
								],
								"id": 651,
								"modifierName": {
									"argumentTypes": null,
									"id": 648,
									"name": "onlyController",
									"nodeType": "Identifier",
									"overloadedDeclarations": [],
									"referencedDeclaration": 53,
									"src": "5793:14:0",
									"typeDescriptions": {
										"typeIdentifier": "t_modifier$_t_address_$_t_address_$",
										"typeString": "modifier (address,address)"
									}
								},
								"nodeType": "ModifierInvocation",
								"src": "5793:31:0"
							}
						],
						"name": "setAttribute",
						"nodeType": "FunctionDefinition",
						"overrides": null,
						"parameters": {
							"id": 647,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 638,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 674,
									"src": "5697:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 637,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "5697:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 640,
									"mutability": "mutable",
									"name": "actor",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 674,
									"src": "5715:13:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 639,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "5715:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 642,
									"mutability": "mutable",
									"name": "name",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 674,
									"src": "5730:17:0",
									"stateVariable": false,
									"storageLocation": "memory",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes_memory_ptr",
										"typeString": "bytes"
									},
									"typeName": {
										"id": 641,
										"name": "bytes",
										"nodeType": "ElementaryTypeName",
										"src": "5730:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes_storage_ptr",
											"typeString": "bytes"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 644,
									"mutability": "mutable",
									"name": "value",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 674,
									"src": "5749:18:0",
									"stateVariable": false,
									"storageLocation": "memory",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes_memory_ptr",
										"typeString": "bytes"
									},
									"typeName": {
										"id": 643,
										"name": "bytes",
										"nodeType": "ElementaryTypeName",
										"src": "5749:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes_storage_ptr",
											"typeString": "bytes"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 646,
									"mutability": "mutable",
									"name": "validity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 674,
									"src": "5769:13:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_uint256",
										"typeString": "uint256"
									},
									"typeName": {
										"id": 645,
										"name": "uint",
										"nodeType": "ElementaryTypeName",
										"src": "5769:4:0",
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "5696:87:0"
						},
						"returnParameters": {
							"id": 652,
							"nodeType": "ParameterList",
							"parameters": [],
							"src": "5825:0:0"
						},
						"scope": 894,
						"src": "5675:303:0",
						"stateMutability": "nonpayable",
						"virtual": false,
						"visibility": "internal"
					},
					{
						"baseFunctions": [
							1235
						],
						"body": {
							"id": 695,
							"nodeType": "Block",
							"src": "6096:74:0",
							"statements": [
								{
									"expression": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"id": 687,
												"name": "identity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 676,
												"src": "6119:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											{
												"argumentTypes": null,
												"expression": {
													"argumentTypes": null,
													"id": 688,
													"name": "msg",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": -15,
													"src": "6129:3:0",
													"typeDescriptions": {
														"typeIdentifier": "t_magic_message",
														"typeString": "msg"
													}
												},
												"id": 689,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"lValueRequested": false,
												"memberName": "sender",
												"nodeType": "MemberAccess",
												"referencedDeclaration": null,
												"src": "6129:10:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address_payable",
													"typeString": "address payable"
												}
											},
											{
												"argumentTypes": null,
												"id": 690,
												"name": "name",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 678,
												"src": "6141:4:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												}
											},
											{
												"argumentTypes": null,
												"id": 691,
												"name": "value",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 680,
												"src": "6147:5:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												}
											},
											{
												"argumentTypes": null,
												"id": 692,
												"name": "validity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 682,
												"src": "6154:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												{
													"typeIdentifier": "t_address_payable",
													"typeString": "address payable"
												},
												{
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												},
												{
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												},
												{
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											],
											"id": 686,
											"name": "setAttribute",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 674,
											"src": "6106:12:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_uint256_$returns$__$",
												"typeString": "function (address,address,bytes memory,bytes memory,uint256)"
											}
										},
										"id": 693,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "6106:57:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 694,
									"nodeType": "ExpressionStatement",
									"src": "6106:57:0"
								}
							]
						},
						"documentation": null,
						"functionSelector": "ccbfa496",
						"id": 696,
						"implemented": true,
						"kind": "function",
						"modifiers": [],
						"name": "setAttribute",
						"nodeType": "FunctionDefinition",
						"overrides": {
							"id": 684,
							"nodeType": "OverrideSpecifier",
							"overrides": [],
							"src": "6087:8:0"
						},
						"parameters": {
							"id": 683,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 676,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 696,
									"src": "6006:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 675,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "6006:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 678,
									"mutability": "mutable",
									"name": "name",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 696,
									"src": "6024:17:0",
									"stateVariable": false,
									"storageLocation": "memory",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes_memory_ptr",
										"typeString": "bytes"
									},
									"typeName": {
										"id": 677,
										"name": "bytes",
										"nodeType": "ElementaryTypeName",
										"src": "6024:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes_storage_ptr",
											"typeString": "bytes"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 680,
									"mutability": "mutable",
									"name": "value",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 696,
									"src": "6043:18:0",
									"stateVariable": false,
									"storageLocation": "memory",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes_memory_ptr",
										"typeString": "bytes"
									},
									"typeName": {
										"id": 679,
										"name": "bytes",
										"nodeType": "ElementaryTypeName",
										"src": "6043:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes_storage_ptr",
											"typeString": "bytes"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 682,
									"mutability": "mutable",
									"name": "validity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 696,
									"src": "6063:13:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_uint256",
										"typeString": "uint256"
									},
									"typeName": {
										"id": 681,
										"name": "uint",
										"nodeType": "ElementaryTypeName",
										"src": "6063:4:0",
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "6005:72:0"
						},
						"returnParameters": {
							"id": 685,
							"nodeType": "ParameterList",
							"parameters": [],
							"src": "6096:0:0"
						},
						"scope": 894,
						"src": "5984:186:0",
						"stateMutability": "nonpayable",
						"virtual": false,
						"visibility": "external"
					},
					{
						"baseFunctions": [
							1252
						],
						"body": {
							"id": 755,
							"nodeType": "Block",
							"src": "6334:277:0",
							"statements": [
								{
									"assignments": [
										715
									],
									"declarations": [
										{
											"constant": false,
											"id": 715,
											"mutability": "mutable",
											"name": "hash",
											"nodeType": "VariableDeclaration",
											"overrides": null,
											"scope": 755,
											"src": "6344:12:0",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_bytes32",
												"typeString": "bytes32"
											},
											"typeName": {
												"id": 714,
												"name": "bytes32",
												"nodeType": "ElementaryTypeName",
												"src": "6344:7:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												}
											},
											"value": null,
											"visibility": "internal"
										}
									],
									"id": 740,
									"initialValue": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"arguments": [
													{
														"argumentTypes": null,
														"arguments": [
															{
																"argumentTypes": null,
																"hexValue": "30783139",
																"id": 721,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "6391:4:0",
																"subdenomination": null,
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_25_by_1",
																	"typeString": "int_const 25"
																},
																"value": "0x19"
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_rational_25_by_1",
																	"typeString": "int_const 25"
																}
															],
															"id": 720,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"nodeType": "ElementaryTypeNameExpression",
															"src": "6386:4:0",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_bytes1_$",
																"typeString": "type(bytes1)"
															},
															"typeName": {
																"id": 719,
																"name": "byte",
																"nodeType": "ElementaryTypeName",
																"src": "6386:4:0",
																"typeDescriptions": {
																	"typeIdentifier": null,
																	"typeString": null
																}
															}
														},
														"id": 722,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "typeConversion",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "6386:10:0",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_bytes1",
															"typeString": "bytes1"
														}
													},
													{
														"argumentTypes": null,
														"arguments": [
															{
																"argumentTypes": null,
																"hexValue": "30",
																"id": 725,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "6403:1:0",
																"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": 724,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"nodeType": "ElementaryTypeNameExpression",
															"src": "6398:4:0",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_bytes1_$",
																"typeString": "type(bytes1)"
															},
															"typeName": {
																"id": 723,
																"name": "byte",
																"nodeType": "ElementaryTypeName",
																"src": "6398:4:0",
																"typeDescriptions": {
																	"typeIdentifier": null,
																	"typeString": null
																}
															}
														},
														"id": 726,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "typeConversion",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "6398:7:0",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_bytes1",
															"typeString": "bytes1"
														}
													},
													{
														"argumentTypes": null,
														"id": 727,
														"name": "this",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": -28,
														"src": "6407:4:0",
														"typeDescriptions": {
															"typeIdentifier": "t_contract$_DIDRegistry_$894",
															"typeString": "contract DIDRegistry"
														}
													},
													{
														"argumentTypes": null,
														"baseExpression": {
															"argumentTypes": null,
															"id": 728,
															"name": "nonce",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 25,
															"src": "6413:5:0",
															"typeDescriptions": {
																"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
																"typeString": "mapping(address => uint256)"
															}
														},
														"id": 732,
														"indexExpression": {
															"argumentTypes": null,
															"arguments": [
																{
																	"argumentTypes": null,
																	"id": 730,
																	"name": "identity",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 698,
																	"src": "6438:8:0",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																],
																"id": 729,
																"name": "identityController",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 169,
																"src": "6419:18:0",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
																	"typeString": "function (address) view returns (address)"
																}
															},
															"id": 731,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "6419:28:0",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "IndexAccess",
														"src": "6413:35:0",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													{
														"argumentTypes": null,
														"id": 733,
														"name": "identity",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 698,
														"src": "6450:8:0",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													{
														"argumentTypes": null,
														"hexValue": "736574417474726962757465",
														"id": 734,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "string",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "6460:14:0",
														"subdenomination": null,
														"typeDescriptions": {
															"typeIdentifier": "t_stringliteral_e5bbb0cf2a185ea034bc61efc4cb764352403a5c06c1da63a3fd765abbac4ea6",
															"typeString": "literal_string \"setAttribute\""
														},
														"value": "setAttribute"
													},
													{
														"argumentTypes": null,
														"id": 735,
														"name": "name",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 706,
														"src": "6476:4:0",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes_memory_ptr",
															"typeString": "bytes memory"
														}
													},
													{
														"argumentTypes": null,
														"id": 736,
														"name": "value",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 708,
														"src": "6482:5:0",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes_memory_ptr",
															"typeString": "bytes memory"
														}
													},
													{
														"argumentTypes": null,
														"id": 737,
														"name": "validity",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 710,
														"src": "6489:8:0",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													}
												],
												"expression": {
													"argumentTypes": [
														{
															"typeIdentifier": "t_bytes1",
															"typeString": "bytes1"
														},
														{
															"typeIdentifier": "t_bytes1",
															"typeString": "bytes1"
														},
														{
															"typeIdentifier": "t_contract$_DIDRegistry_$894",
															"typeString": "contract DIDRegistry"
														},
														{
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														{
															"typeIdentifier": "t_address",
															"typeString": "address"
														},
														{
															"typeIdentifier": "t_stringliteral_e5bbb0cf2a185ea034bc61efc4cb764352403a5c06c1da63a3fd765abbac4ea6",
															"typeString": "literal_string \"setAttribute\""
														},
														{
															"typeIdentifier": "t_bytes_memory_ptr",
															"typeString": "bytes memory"
														},
														{
															"typeIdentifier": "t_bytes_memory_ptr",
															"typeString": "bytes memory"
														},
														{
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													],
													"expression": {
														"argumentTypes": null,
														"id": 717,
														"name": "abi",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": -1,
														"src": "6369:3:0",
														"typeDescriptions": {
															"typeIdentifier": "t_magic_abi",
															"typeString": "abi"
														}
													},
													"id": 718,
													"isConstant": false,
													"isLValue": false,
													"isPure": true,
													"lValueRequested": false,
													"memberName": "encodePacked",
													"nodeType": "MemberAccess",
													"referencedDeclaration": null,
													"src": "6369:16:0",
													"typeDescriptions": {
														"typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
														"typeString": "function () pure returns (bytes memory)"
													}
												},
												"id": 738,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"kind": "functionCall",
												"lValueRequested": false,
												"names": [],
												"nodeType": "FunctionCall",
												"src": "6369:129:0",
												"tryCall": false,
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												}
											],
											"id": 716,
											"name": "keccak256",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": -8,
											"src": "6359:9:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
												"typeString": "function (bytes memory) pure returns (bytes32)"
											}
										},
										"id": 739,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "6359:140:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_bytes32",
											"typeString": "bytes32"
										}
									},
									"nodeType": "VariableDeclarationStatement",
									"src": "6344:155:0"
								},
								{
									"expression": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"id": 742,
												"name": "identity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 698,
												"src": "6522:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											{
												"argumentTypes": null,
												"arguments": [
													{
														"argumentTypes": null,
														"id": 744,
														"name": "identity",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 698,
														"src": "6547:8:0",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													{
														"argumentTypes": null,
														"id": 745,
														"name": "sigV",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 700,
														"src": "6557:4:0",
														"typeDescriptions": {
															"typeIdentifier": "t_uint8",
															"typeString": "uint8"
														}
													},
													{
														"argumentTypes": null,
														"id": 746,
														"name": "sigR",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 702,
														"src": "6563:4:0",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														}
													},
													{
														"argumentTypes": null,
														"id": 747,
														"name": "sigS",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 704,
														"src": "6569:4:0",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														}
													},
													{
														"argumentTypes": null,
														"id": 748,
														"name": "hash",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 715,
														"src": "6575:4:0",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														}
													}
												],
												"expression": {
													"argumentTypes": [
														{
															"typeIdentifier": "t_address",
															"typeString": "address"
														},
														{
															"typeIdentifier": "t_uint8",
															"typeString": "uint8"
														},
														{
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														},
														{
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														},
														{
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														}
													],
													"id": 743,
													"name": "checkSignature",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 209,
													"src": "6532:14:0",
													"typeDescriptions": {
														"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint8_$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
														"typeString": "function (address,uint8,bytes32,bytes32,bytes32) returns (address)"
													}
												},
												"id": 749,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"kind": "functionCall",
												"lValueRequested": false,
												"names": [],
												"nodeType": "FunctionCall",
												"src": "6532:48:0",
												"tryCall": false,
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											{
												"argumentTypes": null,
												"id": 750,
												"name": "name",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 706,
												"src": "6582:4:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												}
											},
											{
												"argumentTypes": null,
												"id": 751,
												"name": "value",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 708,
												"src": "6588:5:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												}
											},
											{
												"argumentTypes": null,
												"id": 752,
												"name": "validity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 710,
												"src": "6595:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												{
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												},
												{
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												},
												{
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											],
											"id": 741,
											"name": "setAttribute",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 674,
											"src": "6509:12:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_uint256_$returns$__$",
												"typeString": "function (address,address,bytes memory,bytes memory,uint256)"
											}
										},
										"id": 753,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "6509:95:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 754,
									"nodeType": "ExpressionStatement",
									"src": "6509:95:0"
								}
							]
						},
						"documentation": null,
						"functionSelector": "c7b2864d",
						"id": 756,
						"implemented": true,
						"kind": "function",
						"modifiers": [],
						"name": "setAttributeSigned",
						"nodeType": "FunctionDefinition",
						"overrides": {
							"id": 712,
							"nodeType": "OverrideSpecifier",
							"overrides": [],
							"src": "6325:8:0"
						},
						"parameters": {
							"id": 711,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 698,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 756,
									"src": "6204:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 697,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "6204:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 700,
									"mutability": "mutable",
									"name": "sigV",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 756,
									"src": "6222:10:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_uint8",
										"typeString": "uint8"
									},
									"typeName": {
										"id": 699,
										"name": "uint8",
										"nodeType": "ElementaryTypeName",
										"src": "6222:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_uint8",
											"typeString": "uint8"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 702,
									"mutability": "mutable",
									"name": "sigR",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 756,
									"src": "6234:12:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes32",
										"typeString": "bytes32"
									},
									"typeName": {
										"id": 701,
										"name": "bytes32",
										"nodeType": "ElementaryTypeName",
										"src": "6234:7:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes32",
											"typeString": "bytes32"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 704,
									"mutability": "mutable",
									"name": "sigS",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 756,
									"src": "6248:12:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes32",
										"typeString": "bytes32"
									},
									"typeName": {
										"id": 703,
										"name": "bytes32",
										"nodeType": "ElementaryTypeName",
										"src": "6248:7:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes32",
											"typeString": "bytes32"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 706,
									"mutability": "mutable",
									"name": "name",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 756,
									"src": "6262:17:0",
									"stateVariable": false,
									"storageLocation": "memory",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes_memory_ptr",
										"typeString": "bytes"
									},
									"typeName": {
										"id": 705,
										"name": "bytes",
										"nodeType": "ElementaryTypeName",
										"src": "6262:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes_storage_ptr",
											"typeString": "bytes"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 708,
									"mutability": "mutable",
									"name": "value",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 756,
									"src": "6281:18:0",
									"stateVariable": false,
									"storageLocation": "memory",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes_memory_ptr",
										"typeString": "bytes"
									},
									"typeName": {
										"id": 707,
										"name": "bytes",
										"nodeType": "ElementaryTypeName",
										"src": "6281:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes_storage_ptr",
											"typeString": "bytes"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 710,
									"mutability": "mutable",
									"name": "validity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 756,
									"src": "6301:13:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_uint256",
										"typeString": "uint256"
									},
									"typeName": {
										"id": 709,
										"name": "uint",
										"nodeType": "ElementaryTypeName",
										"src": "6301:4:0",
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "6203:112:0"
						},
						"returnParameters": {
							"id": 713,
							"nodeType": "ParameterList",
							"parameters": [],
							"src": "6334:0:0"
						},
						"scope": 894,
						"src": "6176:435:0",
						"stateMutability": "nonpayable",
						"virtual": false,
						"visibility": "external"
					},
					{
						"body": {
							"id": 788,
							"nodeType": "Block",
							"src": "6755:128:0",
							"statements": [
								{
									"eventCall": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"id": 772,
												"name": "identity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 758,
												"src": "6790:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											{
												"argumentTypes": null,
												"id": 773,
												"name": "name",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 762,
												"src": "6800:4:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												}
											},
											{
												"argumentTypes": null,
												"id": 774,
												"name": "value",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 764,
												"src": "6806:5:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												}
											},
											{
												"argumentTypes": null,
												"hexValue": "30",
												"id": 775,
												"isConstant": false,
												"isLValue": false,
												"isPure": true,
												"kind": "number",
												"lValueRequested": false,
												"nodeType": "Literal",
												"src": "6813:1:0",
												"subdenomination": null,
												"typeDescriptions": {
													"typeIdentifier": "t_rational_0_by_1",
													"typeString": "int_const 0"
												},
												"value": "0"
											},
											{
												"argumentTypes": null,
												"baseExpression": {
													"argumentTypes": null,
													"id": 776,
													"name": "changed",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 21,
													"src": "6816:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
														"typeString": "mapping(address => uint256)"
													}
												},
												"id": 778,
												"indexExpression": {
													"argumentTypes": null,
													"id": 777,
													"name": "identity",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 758,
													"src": "6824:8:0",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"isConstant": false,
												"isLValue": true,
												"isPure": false,
												"lValueRequested": false,
												"nodeType": "IndexAccess",
												"src": "6816:17:0",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												{
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												},
												{
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												},
												{
													"typeIdentifier": "t_rational_0_by_1",
													"typeString": "int_const 0"
												},
												{
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											],
											"id": 771,
											"name": "DIDAttributeChanged",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 1190,
											"src": "6770:19:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
												"typeString": "function (address,bytes memory,bytes memory,uint256,uint256)"
											}
										},
										"id": 779,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "6770:64:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 780,
									"nodeType": "EmitStatement",
									"src": "6765:69:0"
								},
								{
									"expression": {
										"argumentTypes": null,
										"id": 786,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"lValueRequested": false,
										"leftHandSide": {
											"argumentTypes": null,
											"baseExpression": {
												"argumentTypes": null,
												"id": 781,
												"name": "changed",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 21,
												"src": "6844:7:0",
												"typeDescriptions": {
													"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
													"typeString": "mapping(address => uint256)"
												}
											},
											"id": 783,
											"indexExpression": {
												"argumentTypes": null,
												"id": 782,
												"name": "identity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 758,
												"src": "6852:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											"isConstant": false,
											"isLValue": true,
											"isPure": false,
											"lValueRequested": true,
											"nodeType": "IndexAccess",
											"src": "6844:17:0",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											}
										},
										"nodeType": "Assignment",
										"operator": "=",
										"rightHandSide": {
											"argumentTypes": null,
											"expression": {
												"argumentTypes": null,
												"id": 784,
												"name": "block",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": -4,
												"src": "6864:5:0",
												"typeDescriptions": {
													"typeIdentifier": "t_magic_block",
													"typeString": "block"
												}
											},
											"id": 785,
											"isConstant": false,
											"isLValue": false,
											"isPure": false,
											"lValueRequested": false,
											"memberName": "number",
											"nodeType": "MemberAccess",
											"referencedDeclaration": null,
											"src": "6864:12:0",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											}
										},
										"src": "6844:32:0",
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									},
									"id": 787,
									"nodeType": "ExpressionStatement",
									"src": "6844:32:0"
								}
							]
						},
						"documentation": null,
						"id": 789,
						"implemented": true,
						"kind": "function",
						"modifiers": [
							{
								"arguments": [
									{
										"argumentTypes": null,
										"id": 767,
										"name": "identity",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"referencedDeclaration": 758,
										"src": "6738:8:0",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									{
										"argumentTypes": null,
										"id": 768,
										"name": "actor",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"referencedDeclaration": 760,
										"src": "6748:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									}
								],
								"id": 769,
								"modifierName": {
									"argumentTypes": null,
									"id": 766,
									"name": "onlyController",
									"nodeType": "Identifier",
									"overloadedDeclarations": [],
									"referencedDeclaration": 53,
									"src": "6723:14:0",
									"typeDescriptions": {
										"typeIdentifier": "t_modifier$_t_address_$_t_address_$",
										"typeString": "modifier (address,address)"
									}
								},
								"nodeType": "ModifierInvocation",
								"src": "6723:31:0"
							}
						],
						"name": "revokeAttribute",
						"nodeType": "FunctionDefinition",
						"overrides": null,
						"parameters": {
							"id": 765,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 758,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 789,
									"src": "6642:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 757,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "6642:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 760,
									"mutability": "mutable",
									"name": "actor",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 789,
									"src": "6660:13:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 759,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "6660:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 762,
									"mutability": "mutable",
									"name": "name",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 789,
									"src": "6675:17:0",
									"stateVariable": false,
									"storageLocation": "memory",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes_memory_ptr",
										"typeString": "bytes"
									},
									"typeName": {
										"id": 761,
										"name": "bytes",
										"nodeType": "ElementaryTypeName",
										"src": "6675:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes_storage_ptr",
											"typeString": "bytes"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 764,
									"mutability": "mutable",
									"name": "value",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 789,
									"src": "6694:18:0",
									"stateVariable": false,
									"storageLocation": "memory",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes_memory_ptr",
										"typeString": "bytes"
									},
									"typeName": {
										"id": 763,
										"name": "bytes",
										"nodeType": "ElementaryTypeName",
										"src": "6694:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes_storage_ptr",
											"typeString": "bytes"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "6641:72:0"
						},
						"returnParameters": {
							"id": 770,
							"nodeType": "ParameterList",
							"parameters": [],
							"src": "6755:0:0"
						},
						"scope": 894,
						"src": "6617:266:0",
						"stateMutability": "nonpayable",
						"virtual": false,
						"visibility": "internal"
					},
					{
						"baseFunctions": [
							1261
						],
						"body": {
							"id": 807,
							"nodeType": "Block",
							"src": "6989:67:0",
							"statements": [
								{
									"expression": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"id": 800,
												"name": "identity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 791,
												"src": "7015:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											{
												"argumentTypes": null,
												"expression": {
													"argumentTypes": null,
													"id": 801,
													"name": "msg",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": -15,
													"src": "7025:3:0",
													"typeDescriptions": {
														"typeIdentifier": "t_magic_message",
														"typeString": "msg"
													}
												},
												"id": 802,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"lValueRequested": false,
												"memberName": "sender",
												"nodeType": "MemberAccess",
												"referencedDeclaration": null,
												"src": "7025:10:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address_payable",
													"typeString": "address payable"
												}
											},
											{
												"argumentTypes": null,
												"id": 803,
												"name": "name",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 793,
												"src": "7037:4:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												}
											},
											{
												"argumentTypes": null,
												"id": 804,
												"name": "value",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 795,
												"src": "7043:5:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												{
													"typeIdentifier": "t_address_payable",
													"typeString": "address payable"
												},
												{
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												},
												{
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												}
											],
											"id": 799,
											"name": "revokeAttribute",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 789,
											"src": "6999:15:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
												"typeString": "function (address,address,bytes memory,bytes memory)"
											}
										},
										"id": 805,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "6999:50:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 806,
									"nodeType": "ExpressionStatement",
									"src": "6999:50:0"
								}
							]
						},
						"documentation": null,
						"functionSelector": "8dd83056",
						"id": 808,
						"implemented": true,
						"kind": "function",
						"modifiers": [],
						"name": "revokeAttribute",
						"nodeType": "FunctionDefinition",
						"overrides": {
							"id": 797,
							"nodeType": "OverrideSpecifier",
							"overrides": [],
							"src": "6980:8:0"
						},
						"parameters": {
							"id": 796,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 791,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 808,
									"src": "6914:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 790,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "6914:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 793,
									"mutability": "mutable",
									"name": "name",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 808,
									"src": "6932:17:0",
									"stateVariable": false,
									"storageLocation": "memory",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes_memory_ptr",
										"typeString": "bytes"
									},
									"typeName": {
										"id": 792,
										"name": "bytes",
										"nodeType": "ElementaryTypeName",
										"src": "6932:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes_storage_ptr",
											"typeString": "bytes"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 795,
									"mutability": "mutable",
									"name": "value",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 808,
									"src": "6951:18:0",
									"stateVariable": false,
									"storageLocation": "memory",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes_memory_ptr",
										"typeString": "bytes"
									},
									"typeName": {
										"id": 794,
										"name": "bytes",
										"nodeType": "ElementaryTypeName",
										"src": "6951:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes_storage_ptr",
											"typeString": "bytes"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "6913:57:0"
						},
						"returnParameters": {
							"id": 798,
							"nodeType": "ParameterList",
							"parameters": [],
							"src": "6989:0:0"
						},
						"scope": 894,
						"src": "6889:167:0",
						"stateMutability": "nonpayable",
						"virtual": false,
						"visibility": "external"
					},
					{
						"baseFunctions": [
							1276
						],
						"body": {
							"id": 863,
							"nodeType": "Block",
							"src": "7208:263:0",
							"statements": [
								{
									"assignments": [
										825
									],
									"declarations": [
										{
											"constant": false,
											"id": 825,
											"mutability": "mutable",
											"name": "hash",
											"nodeType": "VariableDeclaration",
											"overrides": null,
											"scope": 863,
											"src": "7218:12:0",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_bytes32",
												"typeString": "bytes32"
											},
											"typeName": {
												"id": 824,
												"name": "bytes32",
												"nodeType": "ElementaryTypeName",
												"src": "7218:7:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												}
											},
											"value": null,
											"visibility": "internal"
										}
									],
									"id": 849,
									"initialValue": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"arguments": [
													{
														"argumentTypes": null,
														"arguments": [
															{
																"argumentTypes": null,
																"hexValue": "30783139",
																"id": 831,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "7265:4:0",
																"subdenomination": null,
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_25_by_1",
																	"typeString": "int_const 25"
																},
																"value": "0x19"
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_rational_25_by_1",
																	"typeString": "int_const 25"
																}
															],
															"id": 830,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"nodeType": "ElementaryTypeNameExpression",
															"src": "7260:4:0",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_bytes1_$",
																"typeString": "type(bytes1)"
															},
															"typeName": {
																"id": 829,
																"name": "byte",
																"nodeType": "ElementaryTypeName",
																"src": "7260:4:0",
																"typeDescriptions": {
																	"typeIdentifier": null,
																	"typeString": null
																}
															}
														},
														"id": 832,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "typeConversion",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "7260:10:0",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_bytes1",
															"typeString": "bytes1"
														}
													},
													{
														"argumentTypes": null,
														"arguments": [
															{
																"argumentTypes": null,
																"hexValue": "30",
																"id": 835,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "7277:1:0",
																"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": 834,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"nodeType": "ElementaryTypeNameExpression",
															"src": "7272:4:0",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_bytes1_$",
																"typeString": "type(bytes1)"
															},
															"typeName": {
																"id": 833,
																"name": "byte",
																"nodeType": "ElementaryTypeName",
																"src": "7272:4:0",
																"typeDescriptions": {
																	"typeIdentifier": null,
																	"typeString": null
																}
															}
														},
														"id": 836,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "typeConversion",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "7272:7:0",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_bytes1",
															"typeString": "bytes1"
														}
													},
													{
														"argumentTypes": null,
														"id": 837,
														"name": "this",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": -28,
														"src": "7281:4:0",
														"typeDescriptions": {
															"typeIdentifier": "t_contract$_DIDRegistry_$894",
															"typeString": "contract DIDRegistry"
														}
													},
													{
														"argumentTypes": null,
														"baseExpression": {
															"argumentTypes": null,
															"id": 838,
															"name": "nonce",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 25,
															"src": "7287:5:0",
															"typeDescriptions": {
																"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
																"typeString": "mapping(address => uint256)"
															}
														},
														"id": 842,
														"indexExpression": {
															"argumentTypes": null,
															"arguments": [
																{
																	"argumentTypes": null,
																	"id": 840,
																	"name": "identity",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 810,
																	"src": "7312:8:0",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																],
																"id": 839,
																"name": "identityController",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 169,
																"src": "7293:18:0",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
																	"typeString": "function (address) view returns (address)"
																}
															},
															"id": 841,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "7293:28:0",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "IndexAccess",
														"src": "7287:35:0",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													{
														"argumentTypes": null,
														"id": 843,
														"name": "identity",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 810,
														"src": "7324:8:0",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													{
														"argumentTypes": null,
														"hexValue": "7265766f6b65417474726962757465",
														"id": 844,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "string",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "7334:17:0",
														"subdenomination": null,
														"typeDescriptions": {
															"typeIdentifier": "t_stringliteral_168e4cc0ad03cc4b6896d89f8a470b9997cd8bbe87ac639c5474674fa958f860",
															"typeString": "literal_string \"revokeAttribute\""
														},
														"value": "revokeAttribute"
													},
													{
														"argumentTypes": null,
														"id": 845,
														"name": "name",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 818,
														"src": "7353:4:0",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes_memory_ptr",
															"typeString": "bytes memory"
														}
													},
													{
														"argumentTypes": null,
														"id": 846,
														"name": "value",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 820,
														"src": "7359:5:0",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes_memory_ptr",
															"typeString": "bytes memory"
														}
													}
												],
												"expression": {
													"argumentTypes": [
														{
															"typeIdentifier": "t_bytes1",
															"typeString": "bytes1"
														},
														{
															"typeIdentifier": "t_bytes1",
															"typeString": "bytes1"
														},
														{
															"typeIdentifier": "t_contract$_DIDRegistry_$894",
															"typeString": "contract DIDRegistry"
														},
														{
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														{
															"typeIdentifier": "t_address",
															"typeString": "address"
														},
														{
															"typeIdentifier": "t_stringliteral_168e4cc0ad03cc4b6896d89f8a470b9997cd8bbe87ac639c5474674fa958f860",
															"typeString": "literal_string \"revokeAttribute\""
														},
														{
															"typeIdentifier": "t_bytes_memory_ptr",
															"typeString": "bytes memory"
														},
														{
															"typeIdentifier": "t_bytes_memory_ptr",
															"typeString": "bytes memory"
														}
													],
													"expression": {
														"argumentTypes": null,
														"id": 827,
														"name": "abi",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": -1,
														"src": "7243:3:0",
														"typeDescriptions": {
															"typeIdentifier": "t_magic_abi",
															"typeString": "abi"
														}
													},
													"id": 828,
													"isConstant": false,
													"isLValue": false,
													"isPure": true,
													"lValueRequested": false,
													"memberName": "encodePacked",
													"nodeType": "MemberAccess",
													"referencedDeclaration": null,
													"src": "7243:16:0",
													"typeDescriptions": {
														"typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
														"typeString": "function () pure returns (bytes memory)"
													}
												},
												"id": 847,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"kind": "functionCall",
												"lValueRequested": false,
												"names": [],
												"nodeType": "FunctionCall",
												"src": "7243:122:0",
												"tryCall": false,
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												}
											],
											"id": 826,
											"name": "keccak256",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": -8,
											"src": "7233:9:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
												"typeString": "function (bytes memory) pure returns (bytes32)"
											}
										},
										"id": 848,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "7233:133:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_bytes32",
											"typeString": "bytes32"
										}
									},
									"nodeType": "VariableDeclarationStatement",
									"src": "7218:148:0"
								},
								{
									"expression": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"id": 851,
												"name": "identity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 810,
												"src": "7392:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											{
												"argumentTypes": null,
												"arguments": [
													{
														"argumentTypes": null,
														"id": 853,
														"name": "identity",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 810,
														"src": "7417:8:0",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													{
														"argumentTypes": null,
														"id": 854,
														"name": "sigV",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 812,
														"src": "7427:4:0",
														"typeDescriptions": {
															"typeIdentifier": "t_uint8",
															"typeString": "uint8"
														}
													},
													{
														"argumentTypes": null,
														"id": 855,
														"name": "sigR",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 814,
														"src": "7433:4:0",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														}
													},
													{
														"argumentTypes": null,
														"id": 856,
														"name": "sigS",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 816,
														"src": "7439:4:0",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														}
													},
													{
														"argumentTypes": null,
														"id": 857,
														"name": "hash",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 825,
														"src": "7445:4:0",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														}
													}
												],
												"expression": {
													"argumentTypes": [
														{
															"typeIdentifier": "t_address",
															"typeString": "address"
														},
														{
															"typeIdentifier": "t_uint8",
															"typeString": "uint8"
														},
														{
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														},
														{
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														},
														{
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														}
													],
													"id": 852,
													"name": "checkSignature",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 209,
													"src": "7402:14:0",
													"typeDescriptions": {
														"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint8_$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
														"typeString": "function (address,uint8,bytes32,bytes32,bytes32) returns (address)"
													}
												},
												"id": 858,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"kind": "functionCall",
												"lValueRequested": false,
												"names": [],
												"nodeType": "FunctionCall",
												"src": "7402:48:0",
												"tryCall": false,
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											{
												"argumentTypes": null,
												"id": 859,
												"name": "name",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 818,
												"src": "7452:4:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												}
											},
											{
												"argumentTypes": null,
												"id": 860,
												"name": "value",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 820,
												"src": "7458:5:0",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												{
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												},
												{
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes memory"
												}
											],
											"id": 850,
											"name": "revokeAttribute",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 789,
											"src": "7376:15:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
												"typeString": "function (address,address,bytes memory,bytes memory)"
											}
										},
										"id": 861,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "7376:88:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 862,
									"nodeType": "ExpressionStatement",
									"src": "7376:88:0"
								}
							]
						},
						"documentation": null,
						"functionSelector": "dff0d6f4",
						"id": 864,
						"implemented": true,
						"kind": "function",
						"modifiers": [],
						"name": "revokeAttributeSigned",
						"nodeType": "FunctionDefinition",
						"overrides": {
							"id": 822,
							"nodeType": "OverrideSpecifier",
							"overrides": [],
							"src": "7199:8:0"
						},
						"parameters": {
							"id": 821,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 810,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 864,
									"src": "7093:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 809,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "7093:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 812,
									"mutability": "mutable",
									"name": "sigV",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 864,
									"src": "7111:10:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_uint8",
										"typeString": "uint8"
									},
									"typeName": {
										"id": 811,
										"name": "uint8",
										"nodeType": "ElementaryTypeName",
										"src": "7111:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_uint8",
											"typeString": "uint8"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 814,
									"mutability": "mutable",
									"name": "sigR",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 864,
									"src": "7123:12:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes32",
										"typeString": "bytes32"
									},
									"typeName": {
										"id": 813,
										"name": "bytes32",
										"nodeType": "ElementaryTypeName",
										"src": "7123:7:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes32",
											"typeString": "bytes32"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 816,
									"mutability": "mutable",
									"name": "sigS",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 864,
									"src": "7137:12:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes32",
										"typeString": "bytes32"
									},
									"typeName": {
										"id": 815,
										"name": "bytes32",
										"nodeType": "ElementaryTypeName",
										"src": "7137:7:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes32",
											"typeString": "bytes32"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 818,
									"mutability": "mutable",
									"name": "name",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 864,
									"src": "7151:17:0",
									"stateVariable": false,
									"storageLocation": "memory",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes_memory_ptr",
										"typeString": "bytes"
									},
									"typeName": {
										"id": 817,
										"name": "bytes",
										"nodeType": "ElementaryTypeName",
										"src": "7151:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes_storage_ptr",
											"typeString": "bytes"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 820,
									"mutability": "mutable",
									"name": "value",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 864,
									"src": "7170:18:0",
									"stateVariable": false,
									"storageLocation": "memory",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes_memory_ptr",
										"typeString": "bytes"
									},
									"typeName": {
										"id": 819,
										"name": "bytes",
										"nodeType": "ElementaryTypeName",
										"src": "7170:5:0",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes_storage_ptr",
											"typeString": "bytes"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "7092:97:0"
						},
						"returnParameters": {
							"id": 823,
							"nodeType": "ParameterList",
							"parameters": [],
							"src": "7208:0:0"
						},
						"scope": 894,
						"src": "7062:409:0",
						"stateMutability": "nonpayable",
						"virtual": false,
						"visibility": "external"
					},
					{
						"baseFunctions": [
							1283
						],
						"body": {
							"id": 879,
							"nodeType": "Block",
							"src": "7562:73:0",
							"statements": [
								{
									"expression": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"id": 873,
												"name": "identity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 866,
												"src": "7590:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											{
												"argumentTypes": null,
												"expression": {
													"argumentTypes": null,
													"id": 874,
													"name": "msg",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": -15,
													"src": "7600:3:0",
													"typeDescriptions": {
														"typeIdentifier": "t_magic_message",
														"typeString": "msg"
													}
												},
												"id": 875,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"lValueRequested": false,
												"memberName": "sender",
												"nodeType": "MemberAccess",
												"referencedDeclaration": null,
												"src": "7600:10:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address_payable",
													"typeString": "address payable"
												}
											},
											{
												"argumentTypes": null,
												"id": 876,
												"name": "keyRotationTime",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 868,
												"src": "7612:15:0",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												{
													"typeIdentifier": "t_address_payable",
													"typeString": "address payable"
												},
												{
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											],
											"id": 872,
											"name": "enableKeyRotation",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 517,
											"src": "7572:17:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
												"typeString": "function (address,address,uint256)"
											}
										},
										"id": 877,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "7572:56:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 878,
									"nodeType": "ExpressionStatement",
									"src": "7572:56:0"
								}
							]
						},
						"documentation": null,
						"functionSelector": "921605e1",
						"id": 880,
						"implemented": true,
						"kind": "function",
						"modifiers": [],
						"name": "enableKeyRotation",
						"nodeType": "FunctionDefinition",
						"overrides": {
							"id": 870,
							"nodeType": "OverrideSpecifier",
							"overrides": [],
							"src": "7553:8:0"
						},
						"parameters": {
							"id": 869,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 866,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 880,
									"src": "7504:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 865,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "7504:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								},
								{
									"constant": false,
									"id": 868,
									"mutability": "mutable",
									"name": "keyRotationTime",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 880,
									"src": "7522:20:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_uint256",
										"typeString": "uint256"
									},
									"typeName": {
										"id": 867,
										"name": "uint",
										"nodeType": "ElementaryTypeName",
										"src": "7522:4:0",
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "7503:40:0"
						},
						"returnParameters": {
							"id": 871,
							"nodeType": "ParameterList",
							"parameters": [],
							"src": "7562:0:0"
						},
						"scope": 894,
						"src": "7477:158:0",
						"stateMutability": "nonpayable",
						"virtual": false,
						"visibility": "external"
					},
					{
						"baseFunctions": [
							1288
						],
						"body": {
							"id": 892,
							"nodeType": "Block",
							"src": "7705:57:0",
							"statements": [
								{
									"expression": {
										"argumentTypes": null,
										"arguments": [
											{
												"argumentTypes": null,
												"id": 887,
												"name": "identity",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 882,
												"src": "7734:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											{
												"argumentTypes": null,
												"expression": {
													"argumentTypes": null,
													"id": 888,
													"name": "msg",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": -15,
													"src": "7744:3:0",
													"typeDescriptions": {
														"typeIdentifier": "t_magic_message",
														"typeString": "msg"
													}
												},
												"id": 889,
												"isConstant": false,
												"isLValue": false,
												"isPure": false,
												"lValueRequested": false,
												"memberName": "sender",
												"nodeType": "MemberAccess",
												"referencedDeclaration": null,
												"src": "7744:10:0",
												"typeDescriptions": {
													"typeIdentifier": "t_address_payable",
													"typeString": "address payable"
												}
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												{
													"typeIdentifier": "t_address_payable",
													"typeString": "address payable"
												}
											],
											"id": 886,
											"name": "disableKeyRotation",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 536,
											"src": "7715:18:0",
											"typeDescriptions": {
												"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
												"typeString": "function (address,address)"
											}
										},
										"id": 890,
										"isConstant": false,
										"isLValue": false,
										"isPure": false,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "7715:40:0",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_tuple$__$",
											"typeString": "tuple()"
										}
									},
									"id": 891,
									"nodeType": "ExpressionStatement",
									"src": "7715:40:0"
								}
							]
						},
						"documentation": null,
						"functionSelector": "22b6be68",
						"id": 893,
						"implemented": true,
						"kind": "function",
						"modifiers": [],
						"name": "disableKeyRotation",
						"nodeType": "FunctionDefinition",
						"overrides": {
							"id": 884,
							"nodeType": "OverrideSpecifier",
							"overrides": [],
							"src": "7696:8:0"
						},
						"parameters": {
							"id": 883,
							"nodeType": "ParameterList",
							"parameters": [
								{
									"constant": false,
									"id": 882,
									"mutability": "mutable",
									"name": "identity",
									"nodeType": "VariableDeclaration",
									"overrides": null,
									"scope": 893,
									"src": "7669:16:0",
									"stateVariable": false,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 881,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "7669:7:0",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": null,
									"visibility": "internal"
								}
							],
							"src": "7668:18:0"
						},
						"returnParameters": {
							"id": 885,
							"nodeType": "ParameterList",
							"parameters": [],
							"src": "7705:0:0"
						},
						"scope": 894,
						"src": "7641:121:0",
						"stateMutability": "nonpayable",
						"virtual": false,
						"visibility": "external"
					}
				],
				"scope": 895,
				"src": "127:7638:0"
			}
		],
		"src": "39:7726:0"
	},
	"bytecode": "0x608060405234801561001057600080fd5b506040516129c43803806129c48339818101604052602081101561003357600080fd5b810190808051906020019092919050505080600481905550506129698061005b6000396000f3fe608060405234801561001057600080fd5b50600436106100f45760003560e01c8063921605e111610097578063ccbfa49611610066578063ccbfa4961461077a578063dff0d6f4146108f6578063f96d0f9f14610a89578063ffb628e214610ae1576100f4565b8063921605e1146104b85780639478c0d114610506578063b4e8a6c41461057e578063c7b2864d146105dd576100f4565b80633e11e378116100d35780633e11e378146102055780634303951b1461026957806370ae92d2146102ee5780638dd8305614610346576100f4565b8062bb9412146100f957806322b6be681461015d5780632bb88442146101a1575b600080fd5b61015b6004803603604081101561010f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b4f565b005b61019f6004803603602081101561017357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b5e565b005b610203600480360360408110156101b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b6b565b005b6102676004803603604081101561021b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b7a565b005b6102ec600480360360a081101561027f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b89565b005b6103306004803603602081101561030457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d01565b6040518082815260200191505060405180910390f35b6104b66004803603606081101561035c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561039957600080fd5b8201836020820111156103ab57600080fd5b803590602001918460018302840111640100000000831117156103cd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561043057600080fd5b82018360208201111561044257600080fd5b8035906020019184600183028401116401000000008311171561046457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610d19565b005b610504600480360360408110156104ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d2a565b005b6105526004803603604081101561051c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d39565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610586610d84565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156105c95780820151818401526020810190506105ae565b505050509050019250505060405180910390f35b610778600480360360e08110156105f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff16906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561065157600080fd5b82018360208201111561066357600080fd5b8035906020019184600183028401116401000000008311171561068557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156106e857600080fd5b8201836020820111156106fa57600080fd5b8035906020019184600183028401116401000000008311171561071c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050610e4e565b005b6108f46004803603608081101561079057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156107cd57600080fd5b8201836020820111156107df57600080fd5b8035906020019184600183028401116401000000008311171561080157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561086457600080fd5b82018360208201111561087657600080fd5b8035906020019184600183028401116401000000008311171561089857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611057565b005b610a87600480360360c081101561090c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff16906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561096a57600080fd5b82018360208201111561097c57600080fd5b8035906020019184600183028401116401000000008311171561099e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610a0157600080fd5b820183602082011115610a1357600080fd5b80359060200191846001830284011164010000000083111715610a3557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061106a565b005b610acb60048036036020811015610a9f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611269565b6040518082815260200191505060405180910390f35b610b2360048036036020811015610af757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611281565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b5a8233836115b3565b5050565b610b68813361179e565b50565b610b76823383611841565b5050565b610b85823383611d05565b5050565b6000601960f81b600060f81b3060036000610ba38b611281565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054898660405160200180877effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101867effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018573ffffffffffffffffffffffffffffffffffffffff1660601b81526014018481526020018373ffffffffffffffffffffffffffffffffffffffff1660601b8152601401807f6368616e6765436f6e74726f6c6c6572000000000000000000000000000000008152506010018273ffffffffffffffffffffffffffffffffffffffff1660601b81526014019650505050505050604051602081830303815290604052805190602001209050610cf986610cf38888888887611ed6565b84611d05565b505050505050565b60036020528060005260406000206000915090505481565b610d2583338484611fdb565b505050565b610d358233836121d9565b5050565b60006020528160005260406000208181548110610d5257fe5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610e4457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610dfa575b5050505050905090565b6000601960f81b600060f81b3060036000610e688d611281565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548b88888860405160200180897effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101887effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018773ffffffffffffffffffffffffffffffffffffffff1660601b81526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1660601b8152601401807f7365744174747269627574650000000000000000000000000000000000000000815250600c0184805190602001908083835b60208310610f995780518252602082019150602081019050602083039250610f76565b6001836020036101000a03801982511681845116808217855250505050505090500183805190602001908083835b60208310610fea5780518252602082019150602081019050602083039250610fc7565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019850505050505050505060405160208183030381529060405280519060200120905061104d886110458a8a8a8a87611ed6565b86868661231e565b5050505050505050565b611064843385858561231e565b50505050565b6000601960f81b600060f81b30600360006110848c611281565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a878760405160200180887effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101877effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1660601b8152601401807f7265766f6b654174747269627574650000000000000000000000000000000000815250600f0183805190602001908083835b602083106111b45780518252602082019150602081019050602083039250611191565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b6020831061120557805182526020820191506020810190506020830392506111e2565b6001836020036101000a038019825116818451168082178552505050505050905001975050505050505050604051602081830303815290604052805190602001209050611260876112598989898987611ed6565b8585611fdb565b50505050505050565b60026020528060005260406000206000915090505481565b6000806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905060008114156112da57829150506115ae565b6001811415611360576000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154811061132d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150506115ae565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160010160009054906101000a900460ff16156114655760006113e7846113d985600201544261251e90919063ffffffff16565b61256890919063ffffffff16565b90506000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818154811061143257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050611568565b828260000154106114ec576000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815481106114ba57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611567565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082600001548154811061153957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146115a7578093505050506115ae565b8493505050505b919050565b82826115be82611281565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146115f557600080fd5b600061160186856125b2565b905060008112156117965760008060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905014156116f6576000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020869080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505050505050565b81816117a982611281565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146117e057600080fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff02191690831515021790555050505050565b828261184c82611281565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461188357600080fd5b60016000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501161191d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180612909602b913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1661193d86611281565b73ffffffffffffffffffffffffffffffffffffffff1614156119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806128c46024913960400191505060405180910390fd5b60006119b686856125b2565b90506000811215611a2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f436f6e74726f6c6c6572206e6f7420657869737400000000000000000000000081525060200191505060405180910390fd5b60008060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905060008060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001830381548110611ac357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050806000808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110611b3a57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611b8b88611281565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c065782600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b6000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001830381548110611c5257fe5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480611cc657fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505050505050565b8282611d1082611281565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611d4757600080fd5b6000611d5386856125b2565b90506000811215611dcc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f436f6e74726f6c6c6572206e6f7420657869737400000000000000000000000081525060200191505060405180910390fd5b60008112611ece57611dde86826126eb565b8573ffffffffffffffffffffffffffffffffffffffff167f2a7278c7e47d91c392e2d4f854ebe76d04458b3f431d27ef2e64707e68615e4885600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a243600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050505050565b60008060018387878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611f33573d6000803e3d6000fd5b505050602060405103519050611f4887611281565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611f7f57600080fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055508091505095945050505050565b8383611fe682611281565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461201d57600080fd5b8573ffffffffffffffffffffffffffffffffffffffff167f011b18dd995a3172c6dbe3b65ce383beec725369bb7cc6c16721013f9f993a7885856000600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b838110156120e95780820151818401526020810190506120ce565b50505050905090810190601f1680156121165780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b8381101561214f578082015181840152602081019050612134565b50505050905090810190601f16801561217c5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a243600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050505050565b82826121e482611281565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461221b57600080fd5b600454831015612276576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806128e86021913960400191505060405180910390fd5b60018060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff02191690831515021790555082600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055505050505050565b848461232982611281565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461236057600080fd5b8673ffffffffffffffffffffffffffffffffffffffff167f011b18dd995a3172c6dbe3b65ce383beec725369bb7cc6c16721013f9f993a788686864201600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b8381101561242d578082015181840152602081019050612412565b50505050905090810190601f16801561245a5780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b83811015612493578082015181840152602081019050612478565b50505050905090810190601f1680156124c05780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a243600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050505050565b600061256083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061273c565b905092915050565b60006125aa83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612802565b905092915050565b600080600090505b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156126c0578273ffffffffffffffffffffffffffffffffffffffff166000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061266357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156126b357809150506126e5565b80806001019150506125ba565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90505b92915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160000181905550505050565b600080831182906127e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156127ad578082015181840152602081019050612792565b50505050905090810190601f1680156127da5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816127f457fe5b049050809150509392505050565b60008083141582906128af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612874578082015181840152602081019050612859565b50505050905090810190601f1680156128a15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508284816128b957fe5b069050939250505056fe596f752063616e6e6f742064656c6574652063757272656e7420636f6e74726f6c6c6572496e76616c6964206d696e696d756d206b657920726f746174696f6e2074696d65596f75206e656564206174206c656173742074776f20636f6e74726f6c6c65727320746f2064656c657465a2646970667358221220ee33115d049a7fc56e559eaf6a21aa2d82386b6b6b7410aaa2231c6e86c4a55964736f6c634300060c0033",
	"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f45760003560e01c8063921605e111610097578063ccbfa49611610066578063ccbfa4961461077a578063dff0d6f4146108f6578063f96d0f9f14610a89578063ffb628e214610ae1576100f4565b8063921605e1146104b85780639478c0d114610506578063b4e8a6c41461057e578063c7b2864d146105dd576100f4565b80633e11e378116100d35780633e11e378146102055780634303951b1461026957806370ae92d2146102ee5780638dd8305614610346576100f4565b8062bb9412146100f957806322b6be681461015d5780632bb88442146101a1575b600080fd5b61015b6004803603604081101561010f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b4f565b005b61019f6004803603602081101561017357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b5e565b005b610203600480360360408110156101b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b6b565b005b6102676004803603604081101561021b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b7a565b005b6102ec600480360360a081101561027f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b89565b005b6103306004803603602081101561030457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d01565b6040518082815260200191505060405180910390f35b6104b66004803603606081101561035c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561039957600080fd5b8201836020820111156103ab57600080fd5b803590602001918460018302840111640100000000831117156103cd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561043057600080fd5b82018360208201111561044257600080fd5b8035906020019184600183028401116401000000008311171561046457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610d19565b005b610504600480360360408110156104ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d2a565b005b6105526004803603604081101561051c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d39565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610586610d84565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156105c95780820151818401526020810190506105ae565b505050509050019250505060405180910390f35b610778600480360360e08110156105f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff16906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561065157600080fd5b82018360208201111561066357600080fd5b8035906020019184600183028401116401000000008311171561068557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156106e857600080fd5b8201836020820111156106fa57600080fd5b8035906020019184600183028401116401000000008311171561071c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050610e4e565b005b6108f46004803603608081101561079057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156107cd57600080fd5b8201836020820111156107df57600080fd5b8035906020019184600183028401116401000000008311171561080157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561086457600080fd5b82018360208201111561087657600080fd5b8035906020019184600183028401116401000000008311171561089857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611057565b005b610a87600480360360c081101561090c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff16906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561096a57600080fd5b82018360208201111561097c57600080fd5b8035906020019184600183028401116401000000008311171561099e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610a0157600080fd5b820183602082011115610a1357600080fd5b80359060200191846001830284011164010000000083111715610a3557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061106a565b005b610acb60048036036020811015610a9f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611269565b6040518082815260200191505060405180910390f35b610b2360048036036020811015610af757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611281565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b5a8233836115b3565b5050565b610b68813361179e565b50565b610b76823383611841565b5050565b610b85823383611d05565b5050565b6000601960f81b600060f81b3060036000610ba38b611281565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054898660405160200180877effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101867effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018573ffffffffffffffffffffffffffffffffffffffff1660601b81526014018481526020018373ffffffffffffffffffffffffffffffffffffffff1660601b8152601401807f6368616e6765436f6e74726f6c6c6572000000000000000000000000000000008152506010018273ffffffffffffffffffffffffffffffffffffffff1660601b81526014019650505050505050604051602081830303815290604052805190602001209050610cf986610cf38888888887611ed6565b84611d05565b505050505050565b60036020528060005260406000206000915090505481565b610d2583338484611fdb565b505050565b610d358233836121d9565b5050565b60006020528160005260406000208181548110610d5257fe5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610e4457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610dfa575b5050505050905090565b6000601960f81b600060f81b3060036000610e688d611281565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548b88888860405160200180897effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101887effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018773ffffffffffffffffffffffffffffffffffffffff1660601b81526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1660601b8152601401807f7365744174747269627574650000000000000000000000000000000000000000815250600c0184805190602001908083835b60208310610f995780518252602082019150602081019050602083039250610f76565b6001836020036101000a03801982511681845116808217855250505050505090500183805190602001908083835b60208310610fea5780518252602082019150602081019050602083039250610fc7565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019850505050505050505060405160208183030381529060405280519060200120905061104d886110458a8a8a8a87611ed6565b86868661231e565b5050505050505050565b611064843385858561231e565b50505050565b6000601960f81b600060f81b30600360006110848c611281565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a878760405160200180887effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101877effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1660601b8152601401807f7265766f6b654174747269627574650000000000000000000000000000000000815250600f0183805190602001908083835b602083106111b45780518252602082019150602081019050602083039250611191565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b6020831061120557805182526020820191506020810190506020830392506111e2565b6001836020036101000a038019825116818451168082178552505050505050905001975050505050505050604051602081830303815290604052805190602001209050611260876112598989898987611ed6565b8585611fdb565b50505050505050565b60026020528060005260406000206000915090505481565b6000806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905060008114156112da57829150506115ae565b6001811415611360576000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154811061132d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150506115ae565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160010160009054906101000a900460ff16156114655760006113e7846113d985600201544261251e90919063ffffffff16565b61256890919063ffffffff16565b90506000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818154811061143257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050611568565b828260000154106114ec576000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815481106114ba57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611567565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082600001548154811061153957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146115a7578093505050506115ae565b8493505050505b919050565b82826115be82611281565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146115f557600080fd5b600061160186856125b2565b905060008112156117965760008060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905014156116f6576000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020869080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505050505050565b81816117a982611281565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146117e057600080fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff02191690831515021790555050505050565b828261184c82611281565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461188357600080fd5b60016000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501161191d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180612909602b913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1661193d86611281565b73ffffffffffffffffffffffffffffffffffffffff1614156119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806128c46024913960400191505060405180910390fd5b60006119b686856125b2565b90506000811215611a2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f436f6e74726f6c6c6572206e6f7420657869737400000000000000000000000081525060200191505060405180910390fd5b60008060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905060008060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001830381548110611ac357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050806000808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110611b3a57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611b8b88611281565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c065782600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b6000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001830381548110611c5257fe5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480611cc657fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505050505050565b8282611d1082611281565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611d4757600080fd5b6000611d5386856125b2565b90506000811215611dcc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f436f6e74726f6c6c6572206e6f7420657869737400000000000000000000000081525060200191505060405180910390fd5b60008112611ece57611dde86826126eb565b8573ffffffffffffffffffffffffffffffffffffffff167f2a7278c7e47d91c392e2d4f854ebe76d04458b3f431d27ef2e64707e68615e4885600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a243600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050505050565b60008060018387878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611f33573d6000803e3d6000fd5b505050602060405103519050611f4887611281565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611f7f57600080fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055508091505095945050505050565b8383611fe682611281565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461201d57600080fd5b8573ffffffffffffffffffffffffffffffffffffffff167f011b18dd995a3172c6dbe3b65ce383beec725369bb7cc6c16721013f9f993a7885856000600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b838110156120e95780820151818401526020810190506120ce565b50505050905090810190601f1680156121165780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b8381101561214f578082015181840152602081019050612134565b50505050905090810190601f16801561217c5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a243600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050505050565b82826121e482611281565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461221b57600080fd5b600454831015612276576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806128e86021913960400191505060405180910390fd5b60018060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff02191690831515021790555082600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055505050505050565b848461232982611281565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461236057600080fd5b8673ffffffffffffffffffffffffffffffffffffffff167f011b18dd995a3172c6dbe3b65ce383beec725369bb7cc6c16721013f9f993a788686864201600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b8381101561242d578082015181840152602081019050612412565b50505050905090810190601f16801561245a5780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b83811015612493578082015181840152602081019050612478565b50505050905090810190601f1680156124c05780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a243600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050505050565b600061256083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061273c565b905092915050565b60006125aa83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612802565b905092915050565b600080600090505b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156126c0578273ffffffffffffffffffffffffffffffffffffffff166000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061266357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156126b357809150506126e5565b80806001019150506125ba565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90505b92915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160000181905550505050565b600080831182906127e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156127ad578082015181840152602081019050612792565b50505050905090810190601f1680156127da5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816127f457fe5b049050809150509392505050565b60008083141582906128af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612874578082015181840152602081019050612859565b50505050905090810190601f1680156128a15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508284816128b957fe5b069050939250505056fe596f752063616e6e6f742064656c6574652063757272656e7420636f6e74726f6c6c6572496e76616c6964206d696e696d756d206b657920726f746174696f6e2074696d65596f75206e656564206174206c656173742074776f20636f6e74726f6c6c65727320746f2064656c657465a2646970667358221220ee33115d049a7fc56e559eaf6a21aa2d82386b6b6b7410aaa2231c6e86c4a55964736f6c634300060c0033",
	"compiler": {
		"name": "solc",
		"version": "0.6.12+commit.27d51765.Emscripten.clang",
		"optimizer": {
			"enabled": false,
			"runs": 200
		},
		"evmVersion": "petersburg"
	}
}
