UNPKG

@etherisc/gif-contracts

Version:

This repository holds the GIF core contracts and tools to develop, test and deploy GIF instances.

1,183 lines 125 kB
{ "abi": [], "allSourcePaths": { "24": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/Strings.sol" }, "ast": { "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/Strings.sol", "exportedSymbols": { "Strings": [ 23075 ] }, "id": 23076, "license": "MIT", "nodeType": "SourceUnit", "nodes": [ { "id": 22851, "literals": [ "solidity", "^", "0.8", ".0" ], "nodeType": "PragmaDirective", "src": "101:23:24" }, { "abstract": false, "baseContracts": [], "contractDependencies": [], "contractKind": "library", "documentation": { "id": 22852, "nodeType": "StructuredDocumentation", "src": "126:34:24", "text": " @dev String operations." }, "fullyImplemented": true, "id": 23075, "linearizedBaseContracts": [ 23075 ], "name": "Strings", "nameLocation": "169:7:24", "nodeType": "ContractDefinition", "nodes": [ { "constant": true, "id": 22855, "mutability": "constant", "name": "_HEX_SYMBOLS", "nameLocation": "208:12:24", "nodeType": "VariableDeclaration", "scope": 23075, "src": "183:58:24", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes16", "typeString": "bytes16" }, "typeName": { "id": 22853, "name": "bytes16", "nodeType": "ElementaryTypeName", "src": "183:7:24", "typeDescriptions": { "typeIdentifier": "t_bytes16", "typeString": "bytes16" } }, "value": { "hexValue": "30313233343536373839616263646566", "id": 22854, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "223:18:24", "typeDescriptions": { "typeIdentifier": "t_stringliteral_cb29997ed99ead0db59ce4d12b7d3723198c827273e5796737c926d78019c39f", "typeString": "literal_string \"0123456789abcdef\"" }, "value": "0123456789abcdef" }, "visibility": "private" }, { "constant": true, "id": 22858, "mutability": "constant", "name": "_ADDRESS_LENGTH", "nameLocation": "270:15:24", "nodeType": "VariableDeclaration", "scope": 23075, "src": "247:43:24", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" }, "typeName": { "id": 22856, "name": "uint8", "nodeType": "ElementaryTypeName", "src": "247:5:24", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "value": { "hexValue": "3230", "id": 22857, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "288:2:24", "typeDescriptions": { "typeIdentifier": "t_rational_20_by_1", "typeString": "int_const 20" }, "value": "20" }, "visibility": "private" }, { "body": { "id": 22936, "nodeType": "Block", "src": "463:632:24", "statements": [ { "condition": { "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22868, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "id": 22866, "name": "value", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22861, "src": "665:5:24", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "hexValue": "30", "id": 22867, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "674:1:24", "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "665:10:24", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "id": 22872, "nodeType": "IfStatement", "src": "661:51:24", "trueBody": { "id": 22871, "nodeType": "Block", "src": "677:35:24", "statements": [ { "expression": { "hexValue": "30", "id": 22869, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "698:3:24", "typeDescriptions": { "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "typeString": "literal_string \"0\"" }, "value": "0" }, "functionReturnParameters": 22865, "id": 22870, "nodeType": "Return", "src": "691:10:24" } ] } }, { "assignments": [ 22874 ], "declarations": [ { "constant": false, "id": 22874, "mutability": "mutable", "name": "temp", "nameLocation": "729:4:24", "nodeType": "VariableDeclaration", "scope": 22936, "src": "721:12:24", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22873, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "721:7:24", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "visibility": "internal" } ], "id": 22876, "initialValue": { "id": 22875, "name": "value", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22861, "src": "736:5:24", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", "src": "721:20:24" }, { "assignments": [ 22878 ], "declarations": [ { "constant": false, "id": 22878, "mutability": "mutable", "name": "digits", "nameLocation": "759:6:24", "nodeType": "VariableDeclaration", "scope": 22936, "src": "751:14:24", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22877, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "751:7:24", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "visibility": "internal" } ], "id": 22879, "nodeType": "VariableDeclarationStatement", "src": "751:14:24" }, { "body": { "id": 22890, "nodeType": "Block", "src": "793:57:24", "statements": [ { "expression": { "id": 22884, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "++", "prefix": false, "src": "807:8:24", "subExpression": { "id": 22883, "name": "digits", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22878, "src": "807:6:24", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 22885, "nodeType": "ExpressionStatement", "src": "807:8:24" }, { "expression": { "id": 22888, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "id": 22886, "name": "temp", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22874, "src": "829:4:24", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "Assignment", "operator": "/=", "rightHandSide": { "hexValue": "3130", "id": 22887, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "837:2:24", "typeDescriptions": { "typeIdentifier": "t_rational_10_by_1", "typeString": "int_const 10" }, "value": "10" }, "src": "829:10:24", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 22889, "nodeType": "ExpressionStatement", "src": "829:10:24" } ] }, "condition": { "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22882, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "id": 22880, "name": "temp", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22874, "src": "782:4:24", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "!=", "rightExpression": { "hexValue": "30", "id": 22881, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "790:1:24", "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "782:9:24", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "id": 22891, "nodeType": "WhileStatement", "src": "775:75:24" }, { "assignments": [ 22893 ], "declarations": [ { "constant": false, "id": 22893, "mutability": "mutable", "name": "buffer", "nameLocation": "872:6:24", "nodeType": "VariableDeclaration", "scope": 22936, "src": "859:19:24", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 22892, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "859:5:24", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "visibility": "internal" } ], "id": 22898, "initialValue": { "arguments": [ { "id": 22896, "name": "digits", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22878, "src": "891:6:24", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "id": 22895, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "NewExpression", "src": "881:9:24", "typeDescriptions": { "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$", "typeString": "function (uint256) pure returns (bytes memory)" }, "typeName": { "id": 22894, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "885:5:24", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } } }, "id": 22897, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "881:17:24", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, "nodeType": "VariableDeclarationStatement", "src": "859:39:24" }, { "body": { "id": 22929, "nodeType": "Block", "src": "927:131:24", "statements": [ { "expression": { "id": 22904, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "id": 22902, "name": "digits", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22878, "src": "941:6:24", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "Assignment", "operator": "-=", "rightHandSide": { "hexValue": "31", "id": 22903, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "951:1:24", "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }, "value": "1" }, "src": "941:11:24", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 22905, "nodeType": "ExpressionStatement", "src": "941:11:24" }, { "expression": { "id": 22923, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "baseExpression": { "id": 22906, "name": "buffer", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22893, "src": "966:6:24", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, "id": 22908, "indexExpression": { "id": 22907, "name": "digits", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22878, "src": "973:6:24", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", "src": "966:14:24", "typeDescriptions": { "typeIdentifier": "t_bytes1", "typeString": "bytes1" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "arguments": [ { "arguments": [ { "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22920, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "hexValue": "3438", "id": 22913, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "996:2:24", "typeDescriptions": { "typeIdentifier": "t_rational_48_by_1", "typeString": "int_const 48" }, "value": "48" }, "nodeType": "BinaryOperation", "operator": "+", "rightExpression": { "arguments": [ { "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22918, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "id": 22916, "name": "value", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22861, "src": "1009:5:24", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "%", "rightExpression": { "hexValue": "3130", "id": 22917, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1017:2:24", "typeDescriptions": { "typeIdentifier": "t_rational_10_by_1", "typeString": "int_const 10" }, "value": "10" }, "src": "1009:10:24", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "id": 22915, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "1001:7:24", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint256_$", "typeString": "type(uint256)" }, "typeName": { "id": 22914, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1001:7:24", "typeDescriptions": {} } }, "id": 22919, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1001:19:24", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "996:24:24", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "id": 22912, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "990:5:24", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint8_$", "typeString": "type(uint8)" }, "typeName": { "id": 22911, "name": "uint8", "nodeType": "ElementaryTypeName", "src": "990:5:24", "typeDescriptions": {} } }, "id": 22921, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "990:31:24", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_uint8", "typeString": "uint8" } ], "id": 22910, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "983:6:24", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes1_$", "typeString": "type(bytes1)" }, "typeName": { "id": 22909, "name": "bytes1", "nodeType": "ElementaryTypeName", "src": "983:6:24", "typeDescriptions": {} } }, "id": 22922, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "983:39:24", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes1", "typeString": "bytes1" } }, "src": "966:56:24", "typeDescriptions": { "typeIdentifier": "t_bytes1", "typeString": "bytes1" } }, "id": 22924, "nodeType": "ExpressionStatement", "src": "966:56:24" }, { "expression": { "id": 22927, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "id": 22925, "name": "value", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22861, "src": "1036:5:24", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "Assignment", "operator": "/=", "rightHandSide": { "hexValue": "3130", "id": 22926, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1045:2:24", "typeDescriptions": { "typeIdentifier": "t_rational_10_by_1", "typeString": "int_const 10" }, "value": "10" }, "src": "1036:11:24", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 22928, "nodeType": "ExpressionStatement", "src": "1036:11:24" } ] }, "condition": { "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22901, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "id": 22899, "name": "value", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22861, "src": "915:5:24", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "!=", "rightExpression": { "hexValue": "30", "id": 22900, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "924:1:24", "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "915:10:24", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "id": 22930, "nodeType": "WhileStatement", "src": "908:150:24" }, { "expression": { "arguments": [ { "id": 22933, "name": "buffer", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22893, "src": "1081:6:24", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 22932, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "1074:6:24", "typeDescriptions": { "typeIdentifier": "t_type$_t_string_storage_ptr_$", "typeString": "type(string storage pointer)" }, "typeName": { "id": 22931, "name": "string", "nodeType": "ElementaryTypeName", "src": "1074:6:24", "typeDescriptions": {} } }, "id": 22934, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1074:14:24", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } }, "functionReturnParameters": 22865, "id": 22935, "nodeType": "Return", "src": "1067:21:24" } ] }, "documentation": { "id": 22859, "nodeType": "StructuredDocumentation", "src": "297:90:24", "text": " @dev Converts a `uint256` to its ASCII `string` decimal representation." }, "id": 22937, "implemented": true, "kind": "function", "modifiers": [], "name": "toString", "nameLocation": "401:8:24", "nodeType": "FunctionDefinition", "parameters": { "id": 22862, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 22861, "mutability": "mutable", "name": "value", "nameLocation": "418:5:24", "nodeType": "VariableDeclaration", "scope": 22937, "src": "410:13:24", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22860, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "410:7:24", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "visibility": "internal" } ], "src": "409:15:24" }, "returnParameters": { "id": 22865, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 22864, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 22937, "src": "448:13:24", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string" }, "typeName": { "id": 22863, "name": "string", "nodeType": "ElementaryTypeName", "src": "448:6:24", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "visibility": "internal" } ], "src": "447:15:24" }, "scope": 23075, "src": "392:703:24", "stateMutability": "pure", "virtual": false, "visibility": "internal" }, { "body": { "id": 22977, "nodeType": "Block", "src": "1274:255:24", "statements": [ { "condition": { "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22947, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "id": 22945, "name": "value", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22940, "src": "1288:5:24", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "hexValue": "30", "id": 22946, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1297:1:24", "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "1288:10:24", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "id": 22951, "nodeType": "IfStatement", "src": "1284:54:24", "trueBody": { "id": 22950, "nodeType": "Block", "src": "1300:38:24", "statements": [ { "expression": { "hexValue": "30783030", "id": 22948, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "1321:6:24", "typeDescriptions": { "typeIdentifier": "t_stringliteral_27489e20a0060b723a1748bdff5e44570ee9fa