diff --git a/.env b/.env
index 703c8bb5f5b31d78537028696d1cabcef6f1b029..68f7291038119a4ae747653f6a21598f1ee759b6 100644
--- a/.env
+++ b/.env
@@ -9,4 +9,4 @@ TWOFACTOR=JNAL432WOMGIAPMJ
 SEPOLIA_PRIVATE_KEY=0xf13efd4a2dda1a23782e7316cb66f090c538b96fb92a5840372eb7ab95187df9
 SEPOLIA_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/IA22Anj6b1Wd0KS5Lji_wZf4MwP3IQPP
 SEPOLIA_API_KEY=TrzaNjpzih7Eeiu8pzdx1Y0FEPJ6gxvQ
-CONTRACT_ADDRESS= 0x6A38Eb54dbef27d875Eb85443C1FFB1fafAB941a
+CONTRACT_ADDRESS= 0x2872973E466719DdD6879f3C13C600686C0401bB
diff --git a/contracts/BIN/StorageByteCode.bin b/contracts/BIN/StorageByteCode.bin
index ef4cffc65d214097d34896df61458faf640c064e..863a0aa55bc633c1979eab92147610bdf4631a8d 100644
--- a/contracts/BIN/StorageByteCode.bin
+++ b/contracts/BIN/StorageByteCode.bin
@@ -1 +1 @@
-0x608060405260043610620001515760003560e01c8063710f756711620000bb578063a65dd2611162000079578063a65dd2611462000468578063aa34652014620004ac578063d757478114620004f0578063e39dc07b1462000534578063f2c298be1462000578578063fcf6acec14620005a65762000151565b8063710f75671462000376578063893d20e814620003a45780639ec1bd0214620003d4578063a26e11861462000404578063a2f77bcc14620004245762000151565b80632a5c792a11620001155780632a5c792a146200024257806330b39a62146200027257806347eea5b21462000292578063487e89ce14620002c057806353b676e714620003045780636e87602714620003485762000151565b8062ce8e3e146200015657806308ad1f1914620001865780630eaad3f114620001b457806310c1bb4b14620001e45780631af99ca01462000214575b600080fd5b3480156200016357600080fd5b506200016e620005d4565b6040516200017d919062002942565b60405180910390f35b3480156200019357600080fd5b50620001b26004803603810190620001ac919062002b06565b620006b7565b005b348015620001c157600080fd5b50620001cc62000b1e565b604051620001db919062002b7d565b60405180910390f35b348015620001f157600080fd5b50620001fc62000b2f565b6040516200020b919062002cbc565b60405180910390f35b3480156200022157600080fd5b506200024060048036038101906200023a919062002ce0565b62000c5a565b005b3480156200024f57600080fd5b506200025a62000dad565b60405162000269919062002dcf565b60405180910390f35b6200029060048036038101906200028a919062002df3565b62000ea9565b005b3480156200029f57600080fd5b50620002be6004803603810190620002b8919062002b06565b62000efd565b005b348015620002cd57600080fd5b50620002ec6004803603810190620002e6919062002ce0565b6200105e565b604051620002fb919062002e77565b60405180910390f35b3480156200031157600080fd5b506200033060048036038101906200032a919062002e94565b62001136565b6040516200033f91906200300b565b60405180910390f35b3480156200035557600080fd5b506200037460048036038101906200036e91906200306e565b620011e5565b005b3480156200038357600080fd5b50620003a260048036038101906200039c919062002df3565b6200136b565b005b348015620003b157600080fd5b50620003bc620013bf565b604051620003cb919062003125565b60405180910390f35b348015620003e157600080fd5b50620003ec620013e7565b604051620003fb919062002b7d565b60405180910390f35b6200042260048036038101906200041c919062002e94565b620013f8565b005b3480156200043157600080fd5b506200045060048036038101906200044a919062002ce0565b6200144a565b6040516200045f9190620031ad565b60405180910390f35b3480156200047557600080fd5b506200049460048036038101906200048e919062002e94565b620015cc565b604051620004a3919062002b7d565b60405180910390f35b348015620004b957600080fd5b50620004d86004803603810190620004d2919062002e94565b620015e0565b604051620004e79190620031fa565b60405180910390f35b348015620004fd57600080fd5b506200051c600480360381019062000516919062002e94565b620017f7565b6040516200052b9190620032e5565b60405180910390f35b3480156200054157600080fd5b506200056060048036038101906200055a919062002b06565b620018a7565b6040516200056f919062003326565b60405180910390f35b3480156200058557600080fd5b50620005a460048036038101906200059e919062002e94565b6200198d565b005b348015620005b357600080fd5b50620005d26004803603810190620005cc919062002ce0565b6200199b565b005b60606000805480602002602001604051908101604052809291908181526020016000905b82821015620006ae5783829060005260206000200180546200061a9062003372565b80601f0160208091040260200160405190810160405280929190818152602001828054620006489062003372565b8015620006995780601f106200066d5761010080835404028352916020019162000699565b820191906000526020600020905b8154815290600101906020018083116200067b57829003601f168201915b505050505081526020019060010190620005f8565b50505050905090565b7f00000000000000000000000017a78e1e9739cb16a0fe9126dd727883b0975b3a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000748576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200073f9062003408565b60405180910390fd5b620007538162001dfa565b62000795576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200078c906200347a565b60405180910390fd5b6000620007a2836200144a565b90508073ffffffffffffffffffffffffffffffffffffffff1663fc7276586040518163ffffffff1660e01b8152600401602060405180830381865afa158015620007f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008169190620034b3565b60058360405162000828919062003527565b90815260200160405180910390205410156200087b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008729062003590565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663fc7276586040518163ffffffff1660e01b8152600401602060405180830381865afa158015620008c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008ed9190620034b3565b600583604051620008ff919062003527565b908152602001604051809103902060008282546200091e9190620035e1565b925050819055508073ffffffffffffffffffffffffffffffffffffffff1663364de8b6836040518263ffffffff1660e01b81526004016200096091906200365d565b600060405180830381600087803b1580156200097b57600080fd5b505af115801562000990573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a76f4937838373ffffffffffffffffffffffffffffffffffffffff1663fc7276586040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a1f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a459190620034b3565b6040518363ffffffff1660e01b815260040162000a64929190620036d1565b600060405180830381600087803b15801562000a7f57600080fd5b505af115801562000a94573d6000803e3d6000fd5b5050505060048260405162000aaa919062003527565b9081526020016040518091039020819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600062000b2a62001eb4565b905090565b6060600062000b3d62001edc565b90506000815167ffffffffffffffff81111562000b5f5762000b5e620029bf565b5b60405190808252806020026020018201604052801562000b9c57816020015b62000b88620027b0565b81526020019060019003908162000b7e5790505b50905060005b825181101562000c5157604051806040016040528084838151811062000bcd5762000bcc6200371a565b5b6020026020010151815260200162000c0285848151811062000bf45762000bf36200371a565b5b6020026020010151620015e0565b72ffffffffffffffffffffffffffffffffffffff1681525082828151811062000c305762000c2f6200371a565b5b6020026020010181905250808062000c489062003749565b91505062000ba2565b50809250505090565b7f00000000000000000000000017a78e1e9739cb16a0fe9126dd727883b0975b3a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000ceb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ce29062003408565b60405180910390fd5b62000cf68162002045565b62000d38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d2f90620037e6565b60405180910390fd5b600062000d45826200144a565b90508073ffffffffffffffffffffffffffffffffffffffff166341dfcc006040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000d9057600080fd5b505af115801562000da5573d6000803e3d6000fd5b505050505050565b60606000808054905067ffffffffffffffff81111562000dd25762000dd1620029bf565b5b60405190808252806020026020018201604052801562000e015781602001602082028036833780820191505090505b50905060005b60008054905081101562000ea157655af3107a400060016000838154811062000e355762000e346200371a565b5b9060005260206000200160405162000e4e9190620038ac565b90815260200160405180910390205462000e699190620038f4565b82828151811062000e7f5762000e7e6200371a565b5b602002602001018181525050808062000e989062003749565b91505062000e07565b508091505090565b62000eb5828262002141565b62000ef96040518060400160405280600881526020017f776974686472617700000000000000000000000000000000000000000000000081525082846001620023ac565b5050565b7f00000000000000000000000017a78e1e9739cb16a0fe9126dd727883b0975b3a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000f8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f859062003408565b60405180910390fd5b62000f998262002045565b62000fdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000fd290620037e6565b60405180910390fd5b600062000fe8836200144a565b90508073ffffffffffffffffffffffffffffffffffffffff1663e976f73e836040518263ffffffff1660e01b81526004016200102591906200365d565b600060405180830381600087803b1580156200104057600080fd5b505af115801562001055573d6000803e3d6000fd5b50505050505050565b60006200106b8262002045565b620010ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010a490620037e6565b60405180910390fd5b6000620010ba836200144a565b90508073ffffffffffffffffffffffffffffffffffffffff1663d63f1f066040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001108573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200112e91906200395d565b915050919050565b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166353b676e7836040518263ffffffff1660e01b81526004016200119591906200365d565b600060405180830381865afa158015620011b3573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190620011de919062003ba1565b9050919050565b7f00000000000000000000000017a78e1e9739cb16a0fe9126dd727883b0975b3a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001276576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200126d9062003408565b60405180910390fd5b620012818462002045565b15620012c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620012bb9062003c42565b60405180910390fd5b600383858484604051620012d890620027ca565b620012e7949392919062003c75565b604051809103906000f08015801562001304573d6000803e3d6000fd5b509080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b620013778282620024c7565b620013bb6040518060400160405280600a81526020017f61646442616c616e63650000000000000000000000000000000000000000000081525082846000620023ac565b5050565b60007f00000000000000000000000017a78e1e9739cb16a0fe9126dd727883b0975b3a905090565b6000620013f3620025e2565b905090565b62001403816200260a565b620014476040518060400160405280600781526020017f6465706f7369740000000000000000000000000000000000000000000000000081525034836000620023ac565b50565b6000620014578262002045565b62001499576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200149090620037e6565b60405180910390fd5b60005b600380549050811015620015c5578260038281548110620014c257620014c16200371a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c0bd83516040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001538573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200155e9190620034b3565b03620015af57600381815481106200157b576200157a6200371a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050620015c7565b8080620015bc9062003749565b9150506200149c565b505b919050565b6000620015d982620026c5565b9050919050565b600080600090506000805b600380549050811015620017b5576003818154811062001610576200160f6200371a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efbfb4ef866040518263ffffffff1660e01b81526004016200167591906200365d565b602060405180830381865afa15801562001693573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016b9919062003cf3565b156200179f5760038181548110620016d657620016d56200371a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359c5fe00866040518263ffffffff1660e01b81526004016200173b91906200365d565b602060405180830381865afa15801562001759573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200177f91906200395d565b836200178c919062003d25565b925081806200179b9062003d61565b9250505b8080620017ac9062003749565b915050620015eb565b5060008160ff1603620017ce57600092505050620017f2565b80606483620017de919062003d8f565b620017ea919062003dd5565b60ff16925050505b919050565b60606004826040516200180b919062003527565b90815260200160405180910390208054806020026020016040519081016040528092919081815260200182805480156200189b57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831162001850575b50505050509050919050565b6000620018b48362002045565b620018f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620018ed90620037e6565b60405180910390fd5b600062001903846200144a565b90508073ffffffffffffffffffffffffffffffffffffffff1663efbfb4ef846040518263ffffffff1660e01b81526004016200194091906200365d565b602060405180830381865afa1580156200195e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001984919062003cf3565b91505092915050565b620019988162002702565b50565b7f00000000000000000000000017a78e1e9739cb16a0fe9126dd727883b0975b3a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001a2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001a239062003408565b60405180910390fd5b62001a378162002045565b62001a79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001a7090620037e6565b60405180910390fd5b600062001a86826200144a565b905060008173ffffffffffffffffffffffffffffffffffffffff1663df15c37e6040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001ad6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019062001b01919062003f04565b905060008273ffffffffffffffffffffffffffffffffffffffff1663403c9fa86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001b51573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b779190620034b3565b90506000606460148362001b8c919062003f55565b62001b989190620038f4565b8262001ba59190620035e1565b915060005b835181101562001c4e5760405160200162001bc59062003fca565b6040516020818303038152906040528051906020012084828151811062001bf15762001bf06200371a565b5b602002602001015160405160200162001c0b919062003527565b604051602081830303815290604052805190602001201462001c3857818062001c349062003749565b9250505b808062001c459062003749565b91505062001baa565b506000810362001c995781600560405162001c699062004031565b9081526020016040518091039020600082825462001c88919062004048565b925050819055505050505062001df7565b600081606460508562001cad919062003f55565b62001cb99190620038f4565b62001cc59190620038f4565b905060005b845181101562001df05781600586838151811062001ced5762001cec6200371a565b5b602002602001015160405162001d04919062003527565b9081526020016040518091039020600082825462001d23919062004048565b92505081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a76f493786838151811062001d7e5762001d7d6200371a565b5b6020026020010151846040518363ffffffff1660e01b815260040162001da6929190620040d3565b600060405180830381600087803b15801562001dc157600080fd5b505af115801562001dd6573d6000803e3d6000fd5b50505050808062001de79062003749565b91505062001cca565b5050505050505b50565b600080600090505b60008054905081101562001ea9578260405160200162001e23919062003527565b604051602081830303815290604052805190602001206000828154811062001e505762001e4f6200371a565b5b9060005260206000200160405160200162001e6c9190620038ac565b604051602081830303815290604052805190602001200362001e9357600191505062001eaf565b808062001ea09062003749565b91505062001e02565b50600090505b919050565b60007f000000000000000000000000000000000000000000000000000000e8d4a51000905090565b6060600062001eea620005d4565b905060006001825162001efe9190620035e1565b67ffffffffffffffff81111562001f1a5762001f19620029bf565b5b60405190808252806020026020018201604052801562001f4f57816020015b606081526020019060019003908162001f395790505b509050600080600190505b83518110156200203b5760405160200162001f759062004031565b6040516020818303038152906040528051906020012084828151811062001fa15762001fa06200371a565b5b602002602001015160405160200162001fbb919062003527565b6040516020818303038152906040528051906020012014620020255783818151811062001fed5762001fec6200371a565b5b6020026020010151838380620020039062003749565b9450815181106200201957620020186200371a565b5b60200260200101819052505b8080620020329062003749565b91505062001f5a565b5081935050505090565b600080600090505b600380549050811015620021365782600382815481106200207357620020726200371a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c0bd83516040518163ffffffff1660e01b8152600401602060405180830381865afa158015620020e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200210f9190620034b3565b03620021205760019150506200213c565b80806200212d9062003749565b9150506200204d565b50600090505b919050565b604051602001620021529062004031565b60405160208183030381529060405280519060200120826040516020016200217b919062003527565b60405160208183030381529060405280519060200120148015620021eb57507f00000000000000000000000017a78e1e9739cb16a0fe9126dd727883b0975b3a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156200222e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620022259062003408565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000005af3107a400060018360405162002261919062003527565b908152602001604051809103902054101580156200229f57507f00000000000000000000000000000000000000000000000000005af3107a40008110155b8015620022cc575080600183604051620022ba919062003527565b90815260200160405180910390205410155b6200230e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620023059062003590565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801562002355573d6000803e3d6000fd5b508060018360405162002369919062003527565b908152602001604051809103902054620023849190620035e1565b60018360405162002396919062003527565b9081526020016040518091039020819055505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a76f49378386866040518463ffffffff1660e01b81526004016200240d939291906200411c565b600060405180830381600087803b1580156200242857600080fd5b505af11580156200243d573d6000803e3d6000fd5b5050505080156200248757826005836040516200245b919062003527565b908152602001604051809103902060008282546200247a9190620035e1565b92505081905550620024c1565b826005836040516200249a919062003527565b90815260200160405180910390206000828254620024b9919062004048565b925050819055505b50505050565b7f00000000000000000000000017a78e1e9739cb16a0fe9126dd727883b0975b3a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462002558576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200254f9062003408565b60405180910390fd5b620025638262001dfa565b620025a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200259c906200347a565b60405180910390fd5b80600183604051620025b8919062003527565b90815260200160405180910390206000828254620025d7919062004048565b925050819055505050565b60007f00000000000000000000000000000000000000000000000000005af3107a4000905090565b7f000000000000000000000000000000000000000000000000000000e8d4a5100034101562002670576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620026679062003590565b60405180910390fd5b3460018260405162002683919062003527565b9081526020016040518091039020546200269e919062004048565b600182604051620026b0919062003527565b90815260200160405180910390208190555050565b6000655af3107a4000600183604051620026e0919062003527565b908152602001604051809103902054620026fb9190620038f4565b9050919050565b6200270d8162001dfa565b1562002750576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200274790620041b7565b60405180910390fd5b6000819080600181540180825580915050600190039060005260206000200160009091909190915090816200278691906200438c565b5060006001826040516200279b919062003527565b90815260200160405180910390208190555050565b604051806040016040528060608152602001600081525090565b6117f9806200447483390190565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b838110156200284057808201518184015260208101905062002823565b60008484015250505050565b6000601f19601f8301169050919050565b60006200286a8262002804565b6200287681856200280f565b93506200288881856020860162002820565b62002893816200284c565b840191505092915050565b6000620028ac83836200285d565b905092915050565b6000602082019050919050565b6000620028ce82620027d8565b620028da8185620027e3565b935083602082028501620028ee85620027f4565b8060005b858110156200293057848403895281516200290e85826200289e565b94506200291b83620028b4565b925060208a01995050600181019050620028f2565b50829750879550505050505092915050565b600060208201905081810360008301526200295e8184620028c1565b905092915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6200298f816200297a565b81146200299b57600080fd5b50565b600081359050620029af8162002984565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620029f9826200284c565b810181811067ffffffffffffffff8211171562002a1b5762002a1a620029bf565b5b80604052505050565b600062002a3062002966565b905062002a3e8282620029ee565b919050565b600067ffffffffffffffff82111562002a615762002a60620029bf565b5b62002a6c826200284c565b9050602081019050919050565b82818337600083830152505050565b600062002a9f62002a998462002a43565b62002a24565b90508281526020810184848401111562002abe5762002abd620029ba565b5b62002acb84828562002a79565b509392505050565b600082601f83011262002aeb5762002aea620029b5565b5b813562002afd84826020860162002a88565b91505092915050565b6000806040838503121562002b205762002b1f62002970565b5b600062002b30858286016200299e565b925050602083013567ffffffffffffffff81111562002b545762002b5362002975565b5b62002b628582860162002ad3565b9150509250929050565b62002b77816200297a565b82525050565b600060208201905062002b94600083018462002b6c565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b62002bd1816200297a565b82525050565b6000604083016000830151848203600086015262002bf682826200285d565b915050602083015162002c0d602086018262002bc6565b508091505092915050565b600062002c26838362002bd7565b905092915050565b6000602082019050919050565b600062002c488262002b9a565b62002c54818562002ba5565b93508360208202850162002c688562002bb6565b8060005b8581101562002caa578484038952815162002c88858262002c18565b945062002c958362002c2e565b925060208a0199505060018101905062002c6c565b50829750879550505050505092915050565b6000602082019050818103600083015262002cd8818462002c3b565b905092915050565b60006020828403121562002cf95762002cf862002970565b5b600062002d09848285016200299e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600062002d4c838362002bc6565b60208301905092915050565b6000602082019050919050565b600062002d728262002d12565b62002d7e818562002d1d565b935062002d8b8362002d2e565b8060005b8381101562002dc257815162002da6888262002d3e565b975062002db38362002d58565b92505060018101905062002d8f565b5085935050505092915050565b6000602082019050818103600083015262002deb818462002d65565b905092915050565b6000806040838503121562002e0d5762002e0c62002970565b5b600083013567ffffffffffffffff81111562002e2e5762002e2d62002975565b5b62002e3c8582860162002ad3565b925050602062002e4f858286016200299e565b9150509250929050565b600060ff82169050919050565b62002e718162002e59565b82525050565b600060208201905062002e8e600083018462002e66565b92915050565b60006020828403121562002ead5762002eac62002970565b5b600082013567ffffffffffffffff81111562002ece5762002ecd62002975565b5b62002edc8482850162002ad3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000606083016000830151848203600086015262002f3082826200285d565b915050602083015162002f47602086018262002bc6565b50604083015162002f5c604086018262002bc6565b508091505092915050565b600062002f75838362002f11565b905092915050565b6000602082019050919050565b600062002f978262002ee5565b62002fa3818562002ef0565b93508360208202850162002fb78562002f01565b8060005b8581101562002ff9578484038952815162002fd7858262002f67565b945062002fe48362002f7d565b925060208a0199505060018101905062002fbb565b50829750879550505050505092915050565b6000602082019050818103600083015262003027818462002f8a565b905092915050565b600061ffff82169050919050565b62003048816200302f565b81146200305457600080fd5b50565b60008135905062003068816200303d565b92915050565b600080600080608085870312156200308b576200308a62002970565b5b60006200309b878288016200299e565b9450506020620030ae878288016200299e565b9350506040620030c1878288016200299e565b9250506060620030d48782880162003057565b91505092959194509250565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200310d82620030e0565b9050919050565b6200311f8162003100565b82525050565b60006020820190506200313c600083018462003114565b92915050565b6000819050919050565b60006200316d620031676200316184620030e0565b62003142565b620030e0565b9050919050565b600062003181826200314c565b9050919050565b6000620031958262003174565b9050919050565b620031a78162003188565b82525050565b6000602082019050620031c460008301846200319c565b92915050565b600072ffffffffffffffffffffffffffffffffffffff82169050919050565b620031f481620031ca565b82525050565b6000602082019050620032116000830184620031e9565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6200324e8162003188565b82525050565b600062003262838362003243565b60208301905092915050565b6000602082019050919050565b6000620032888262003217565b62003294818562003222565b9350620032a18362003233565b8060005b83811015620032d8578151620032bc888262003254565b9750620032c9836200326e565b925050600181019050620032a5565b5085935050505092915050565b600060208201905081810360008301526200330181846200327b565b905092915050565b60008115159050919050565b620033208162003309565b82525050565b60006020820190506200333d600083018462003315565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200338b57607f821691505b602082108103620033a157620033a062003343565b5b50919050565b600082825260208201905092915050565b7f53746f726167655f5f4e6f744f776e6572000000000000000000000000000000600082015250565b6000620033f0601183620033a7565b9150620033fd82620033b8565b602082019050919050565b600060208201905081810360008301526200342381620033e1565b9050919050565b7f53746f726167655f5f557365724e6f74466f756e640000000000000000000000600082015250565b600062003462601583620033a7565b91506200346f826200342a565b602082019050919050565b60006020820190508181036000830152620034958162003453565b9050919050565b600081519050620034ad8162002984565b92915050565b600060208284031215620034cc57620034cb62002970565b5b6000620034dc848285016200349c565b91505092915050565b600081905092915050565b6000620034fd8262002804565b620035098185620034e5565b93506200351b81856020860162002820565b80840191505092915050565b6000620035358284620034f0565b915081905092915050565b7f53746f726167655f5f4e6f74456e6f756768546f6b656e730000000000000000600082015250565b600062003578601883620033a7565b9150620035858262003540565b602082019050919050565b60006020820190508181036000830152620035ab8162003569565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620035ee826200297a565b9150620035fb836200297a565b9250828203905081811115620036165762003615620035b2565b5b92915050565b6000620036298262002804565b620036358185620033a7565b93506200364781856020860162002820565b62003652816200284c565b840191505092915050565b600060208201905081810360008301526200367981846200361c565b905092915050565b7f67616d6500000000000000000000000000000000000000000000000000000000600082015250565b6000620036b9600483620033a7565b9150620036c68262003681565b602082019050919050565b60006060820190508181036000830152620036ed81856200361c565b905081810360208301526200370281620036aa565b905062003713604083018462002b6c565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600062003756826200297a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200378b576200378a620035b2565b5b600182019050919050565b7f53746f726167655f5f47616d654e6f74466f756e640000000000000000000000600082015250565b6000620037ce601583620033a7565b9150620037db8262003796565b602082019050919050565b600060208201905081810360008301526200380181620037bf565b9050919050565b60008190508160005260206000209050919050565b600081546200382c8162003372565b620038388186620034e5565b945060018216600081146200385657600181146200386c57620038a3565b60ff1983168652811515820286019350620038a3565b620038778562003808565b60005b838110156200389b578154818901526001820191506020810190506200387a565b838801955050505b50505092915050565b6000620038ba82846200381d565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062003901826200297a565b91506200390e836200297a565b925082620039215762003920620038c5565b5b828204905092915050565b620039378162002e59565b81146200394357600080fd5b50565b60008151905062003957816200392c565b92915050565b60006020828403121562003976576200397562002970565b5b6000620039868482850162003946565b91505092915050565b600067ffffffffffffffff821115620039ad57620039ac620029bf565b5b602082029050602081019050919050565b600080fd5b600080fd5b600080fd5b6000620039e4620039de8462002a43565b62002a24565b90508281526020810184848401111562003a035762003a02620029ba565b5b62003a1084828562002820565b509392505050565b600082601f83011262003a305762003a2f620029b5565b5b815162003a42848260208601620039cd565b91505092915050565b60006060828403121562003a645762003a63620039c3565b5b62003a70606062002a24565b9050600082015167ffffffffffffffff81111562003a935762003a92620039c8565b5b62003aa18482850162003a18565b600083015250602062003ab7848285016200349c565b602083015250604062003acd848285016200349c565b60408301525092915050565b600062003af062003aea846200398f565b62002a24565b9050808382526020820190506020840283018581111562003b165762003b15620039be565b5b835b8181101562003b6457805167ffffffffffffffff81111562003b3f5762003b3e620029b5565b5b80860162003b4e898262003a4b565b8552602085019450505060208101905062003b18565b5050509392505050565b600082601f83011262003b865762003b85620029b5565b5b815162003b9884826020860162003ad9565b91505092915050565b60006020828403121562003bba5762003bb962002970565b5b600082015167ffffffffffffffff81111562003bdb5762003bda62002975565b5b62003be98482850162003b6e565b91505092915050565b7f53746f726167655f5f47616d6545786973747300000000000000000000000000600082015250565b600062003c2a601383620033a7565b915062003c378262003bf2565b602082019050919050565b6000602082019050818103600083015262003c5d8162003c1b565b9050919050565b62003c6f816200302f565b82525050565b600060808201905062003c8c600083018762002b6c565b62003c9b602083018662002b6c565b62003caa604083018562002b6c565b62003cb9606083018462003c64565b95945050505050565b62003ccd8162003309565b811462003cd957600080fd5b50565b60008151905062003ced8162003cc2565b92915050565b60006020828403121562003d0c5762003d0b62002970565b5b600062003d1c8482850162003cdc565b91505092915050565b600062003d328262002e59565b915062003d3f8362002e59565b9250828201905060ff81111562003d5b5762003d5a620035b2565b5b92915050565b600062003d6e8262002e59565b915060ff820362003d845762003d83620035b2565b5b600182019050919050565b600062003d9c8262002e59565b915062003da98362002e59565b925082820262003db98162002e59565b915080821462003dce5762003dcd620035b2565b5b5092915050565b600062003de28262002e59565b915062003def8362002e59565b92508262003e025762003e01620038c5565b5b828204905092915050565b600067ffffffffffffffff82111562003e2b5762003e2a620029bf565b5b602082029050602081019050919050565b600062003e5362003e4d8462003e0d565b62002a24565b9050808382526020820190506020840283018581111562003e795762003e78620039be565b5b835b8181101562003ec757805167ffffffffffffffff81111562003ea25762003ea1620029b5565b5b80860162003eb1898262003a18565b8552602085019450505060208101905062003e7b565b5050509392505050565b600082601f83011262003ee95762003ee8620029b5565b5b815162003efb84826020860162003e3c565b91505092915050565b60006020828403121562003f1d5762003f1c62002970565b5b600082015167ffffffffffffffff81111562003f3e5762003f3d62002975565b5b62003f4c8482850162003ed1565b91505092915050565b600062003f62826200297a565b915062003f6f836200297a565b925082820262003f7f816200297a565b9150828204841483151762003f995762003f98620035b2565b5b5092915050565b50565b600062003fb2600083620034e5565b915062003fbf8262003fa0565b600082019050919050565b600062003fd78262003fa3565b9150819050919050565b7f6f776e6572000000000000000000000000000000000000000000000000000000600082015250565b600062004019600583620034e5565b9150620040268262003fe1565b600582019050919050565b60006200403e826200400a565b9150819050919050565b600062004055826200297a565b915062004062836200297a565b92508282019050808211156200407d576200407c620035b2565b5b92915050565b7f77696e0000000000000000000000000000000000000000000000000000000000600082015250565b6000620040bb600383620033a7565b9150620040c88262004083565b602082019050919050565b60006060820190508181036000830152620040ef81856200361c565b905081810360208301526200410481620040ac565b905062004115604083018462002b6c565b9392505050565b600060608201905081810360008301526200413881866200361c565b905081810360208301526200414e81856200361c565b90506200415f604083018462002b6c565b949350505050565b7f53746f726167655f5f5573657245786973747300000000000000000000000000600082015250565b60006200419f601383620033a7565b9150620041ac8262004167565b602082019050919050565b60006020820190508181036000830152620041d28162004190565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620042287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620041e9565b620042348683620041e9565b95508019841693508086168417925050509392505050565b60006200426d6200426762004261846200297a565b62003142565b6200297a565b9050919050565b6000819050919050565b62004289836200424c565b620042a1620042988262004274565b848454620041f6565b825550505050565b600090565b620042b8620042a9565b620042c58184846200427e565b505050565b5b81811015620042ed57620042e1600082620042ae565b600181019050620042cb565b5050565b601f8211156200433c57620043068162003808565b6200431184620041d9565b8101602085101562004321578190505b620043396200433085620041d9565b830182620042ca565b50505b505050565b600082821c905092915050565b6000620043616000198460080262004341565b1980831691505092915050565b60006200437c83836200434e565b9150826002028217905092915050565b620043978262002804565b67ffffffffffffffff811115620043b357620043b2620029bf565b5b620043bf825462003372565b620043cc828285620042f1565b600060209050601f831160018114620044045760008415620043ef578287015190505b620043fb85826200436e565b8655506200446b565b601f198416620044148662003808565b60005b828110156200443e5784890151825560018201915060208501945060208101905062004417565b868310156200445e57848901516200445a601f8916826200434e565b8355505b6001600288020188555050505b50505050505056fe6101006040526000600160006101000a81548160ff0219169083151502179055503480156200002d57600080fd5b50604051620017f9380380620017f983398181016040528101906200005391906200010b565b83608081815250508260a08181525050600080819055508160c081815250508061ffff1660e08161ffff1681525050505050506200017d565b600080fd5b6000819050919050565b620000a68162000091565b8114620000b257600080fd5b50565b600081519050620000c6816200009b565b92915050565b600061ffff82169050919050565b620000e581620000cc565b8114620000f157600080fd5b50565b6000815190506200010581620000da565b92915050565b600080600080608085870312156200012857620001276200008c565b5b60006200013887828801620000b5565b94505060206200014b87828801620000b5565b93505060406200015e87828801620000b5565b92505060606200017187828801620000f4565b91505092959194509250565b60805160a05160c05160e05161163e620001bb60003960006102e601526000505060006108350152600081816104c10152610c53015261163e6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063ac42a5351161008c578063df15c37e11610066578063df15c37e14610215578063e976f73e14610233578063efbfb4ef1461024f578063fc7276581461027f576100ea565b8063ac42a535146101a9578063c0bd8351146101d9578063d63f1f06146101f7576100ea565b806359c5fe00116100c857806359c5fe00146101335780635aa68ac0146101635780637b352962146101815780639fecb69f1461019f576100ea565b8063364de8b6146100ef578063403c9fa81461010b57806341dfcc0014610129575b600080fd5b61010960048036038101906101049190610df0565b61029d565b005b6101136104fa565b6040516101209190610e52565b60405180910390f35b610131610503565b005b61014d60048036038101906101489190610df0565b610636565b60405161015a9190610e89565b60405180910390f35b61016b61066e565b6040516101789190610fe5565b60405180910390f35b610189610747565b6040516101969190611022565b60405180910390f35b6101a761075e565b005b6101c360048036038101906101be9190610df0565b6107c1565b6040516101d0919061108a565b60405180910390f35b6101e1610831565b6040516101ee9190610e52565b60405180910390f35b6101ff610859565b60405161020c9190610e89565b60405180910390f35b61021d610916565b60405161022a9190610fe5565b60405180910390f35b61024d60048036038101906102489190610df0565b610b1e565b005b61026960048036038101906102649190610df0565b610ba2565b6040516102769190611022565b60405180910390f35b610287610c4f565b6040516102949190610e52565b60405180910390f35b600160009054906101000a900460ff16156102e4576040517fba425c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061ffff1660028054905010610346576040517f94d0a6fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b60028054905081101561040b578160405160200161036791906110e1565b6040516020818303038152906040528051906020012060028281548110610391576103906110f8565b5b906000526020600020016040516020016103ab919061121f565b60405160208183030381529060405280519060200120036103f8576040517fb0650c4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808061040390611265565b915050610349565b506002819080600181540180825580915050600190039060005260206000200160009091909190915090816104409190611444565b506040518060400160405280600060ff1681526020016001151581525060038260405161046d91906110e1565b908152602001604051809103902060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff0219169083151502179055509050507f00000000000000000000000000000000000000000000000000000000000000006000808282546104f09190611516565b9250508190555050565b60008054905090565b600160009054906101000a900460ff161561054a576040517fba425c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b600280549050811015610633576003600282815481106105705761056f6110f8565b5b90600052602060002001604051610587919061121f565b908152602001604051809103902060000160019054906101000a900460ff1615610620576003600282815481106105c1576105c06110f8565b5b906000526020600020016040516105d8919061121f565b9081526020016040518091039020600001600081819054906101000a900460ff16809291906106069061154a565b91906101000a81548160ff021916908360ff160217905550505b808061062b90611265565b91505061054d565b50565b600060038260405161064891906110e1565b908152602001604051809103902060000160009054906101000a900460ff169050919050565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101561073e5783829060005260206000200180546106b190611156565b80601f01602080910402602001604051908101604052809291908181526020018280546106dd90611156565b801561072a5780601f106106ff5761010080835404028352916020019161072a565b820191906000526020600020905b81548152906001019060200180831161070d57829003601f168201915b505050505081526020019060010190610692565b50505050905090565b6000600160009054906101000a900460ff16905090565b600160009054906101000a900460ff16156107a5576040517fba425c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018060006101000a81548160ff021916908315150217905550565b6107c9610c77565b6003826040516107d991906110e1565b90815260200160405180910390206040518060400160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1615151515815250509050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b600080600090506000805b6002805490508110156108eb57600360028281548110610887576108866110f8565b5b9060005260206000200160405161089e919061121f565b908152602001604051809103902060000160009054906101000a900460ff16836108c89190611573565b925081806108d59061154a565b92505080806108e390611265565b915050610864565b5060008160ff160361090257600092505050610913565b808261090e91906115d7565b925050505b90565b6060600060028054905067ffffffffffffffff81111561093957610938610cc5565b5b60405190808252806020026020018201604052801561096c57816020015b60608152602001906001900390816109575790505b5090506000805b600280549050811015610b1557600360028281548110610996576109956110f8565b5b906000526020600020016040516109ad919061121f565b908152602001604051809103902060000160019054906101000a900460ff168015610a265750600a6003600283815481106109eb576109ea6110f8565b5b90600052602060002001604051610a02919061121f565b908152602001604051809103902060000160009054906101000a900460ff1660ff16145b15610b025760028181548110610a3f57610a3e6110f8565b5b906000526020600020018054610a5490611156565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8090611156565b8015610acd5780601f10610aa257610100808354040283529160200191610acd565b820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b5050505050838360ff1681518110610ae857610ae76110f8565b5b60200260200101819052508180610afe9061154a565b9250505b8080610b0d90611265565b915050610973565b50819250505090565b600160009054906101000a900460ff1615610b65576040517fba425c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600382604051610b7791906110e1565b908152602001604051809103902060000160016101000a81548160ff02191690831515021790555050565b600080600090505b600280549050811015610c445782604051602001610bc891906110e1565b6040516020818303038152906040528051906020012060028281548110610bf257610bf16110f8565b5b90600052602060002001604051602001610c0c919061121f565b6040516020818303038152906040528051906020012003610c31576001915050610c4a565b8080610c3c90611265565b915050610baa565b50600090505b919050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b6040518060400160405280600060ff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610cfd82610cb4565b810181811067ffffffffffffffff82111715610d1c57610d1b610cc5565b5b80604052505050565b6000610d2f610c96565b9050610d3b8282610cf4565b919050565b600067ffffffffffffffff821115610d5b57610d5a610cc5565b5b610d6482610cb4565b9050602081019050919050565b82818337600083830152505050565b6000610d93610d8e84610d40565b610d25565b905082815260208101848484011115610daf57610dae610caf565b5b610dba848285610d71565b509392505050565b600082601f830112610dd757610dd6610caa565b5b8135610de7848260208601610d80565b91505092915050565b600060208284031215610e0657610e05610ca0565b5b600082013567ffffffffffffffff811115610e2457610e23610ca5565b5b610e3084828501610dc2565b91505092915050565b6000819050919050565b610e4c81610e39565b82525050565b6000602082019050610e676000830184610e43565b92915050565b600060ff82169050919050565b610e8381610e6d565b82525050565b6000602082019050610e9e6000830184610e7a565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610f0a578082015181840152602081019050610eef565b60008484015250505050565b6000610f2182610ed0565b610f2b8185610edb565b9350610f3b818560208601610eec565b610f4481610cb4565b840191505092915050565b6000610f5b8383610f16565b905092915050565b6000602082019050919050565b6000610f7b82610ea4565b610f858185610eaf565b935083602082028501610f9785610ec0565b8060005b85811015610fd35784840389528151610fb48582610f4f565b9450610fbf83610f63565b925060208a01995050600181019050610f9b565b50829750879550505050505092915050565b60006020820190508181036000830152610fff8184610f70565b905092915050565b60008115159050919050565b61101c81611007565b82525050565b60006020820190506110376000830184611013565b92915050565b61104681610e6d565b82525050565b61105581611007565b82525050565b604082016000820151611071600085018261103d565b506020820151611084602085018261104c565b50505050565b600060408201905061109f600083018461105b565b92915050565b600081905092915050565b60006110bb82610ed0565b6110c581856110a5565b93506110d5818560208601610eec565b80840191505092915050565b60006110ed82846110b0565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061116e57607f821691505b60208210810361118157611180611127565b5b50919050565b60008190508160005260206000209050919050565b600081546111a981611156565b6111b381866110a5565b945060018216600081146111ce57600181146111e357611216565b60ff1983168652811515820286019350611216565b6111ec85611187565b60005b8381101561120e578154818901526001820191506020810190506111ef565b838801955050505b50505092915050565b600061122b828461119c565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061127082610e39565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036112a2576112a1611236565b5b600182019050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026112fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826112bd565b61130486836112bd565b95508019841693508086168417925050509392505050565b6000819050919050565b600061134161133c61133784610e39565b61131c565b610e39565b9050919050565b6000819050919050565b61135b83611326565b61136f61136782611348565b8484546112ca565b825550505050565b600090565b611384611377565b61138f818484611352565b505050565b5b818110156113b3576113a860008261137c565b600181019050611395565b5050565b601f8211156113f8576113c981611187565b6113d2846112ad565b810160208510156113e1578190505b6113f56113ed856112ad565b830182611394565b50505b505050565b600082821c905092915050565b600061141b600019846008026113fd565b1980831691505092915050565b6000611434838361140a565b9150826002028217905092915050565b61144d82610ed0565b67ffffffffffffffff81111561146657611465610cc5565b5b6114708254611156565b61147b8282856113b7565b600060209050601f8311600181146114ae576000841561149c578287015190505b6114a68582611428565b86555061150e565b601f1984166114bc86611187565b60005b828110156114e4578489015182556001820191506020850194506020810190506114bf565b8683101561150157848901516114fd601f89168261140a565b8355505b6001600288020188555050505b505050505050565b600061152182610e39565b915061152c83610e39565b925082820190508082111561154457611543611236565b5b92915050565b600061155582610e6d565b915060ff820361156857611567611236565b5b600182019050919050565b600061157e82610e6d565b915061158983610e6d565b9250828201905060ff8111156115a2576115a1611236565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006115e282610e6d565b91506115ed83610e6d565b9250826115fd576115fc6115a8565b5b82820490509291505056fea26469706673582212203af71f011f16ded1a0b12120fd4f3293b485186b8ff3c5f8010f3dab0eb0fb7164736f6c63430008130033a264697066735822122064ed4d56a30d83be040c6739527d4b9280d16a360e65b672479e17b8fc5afa7664736f6c63430008130033
\ No newline at end of file
+0x608060405260043610620001515760003560e01c8063710f756711620000bb578063a65dd2611162000079578063a65dd2611462000468578063aa34652014620004ac578063d757478114620004f0578063e39dc07b1462000534578063f2c298be1462000578578063fcf6acec14620005a65762000151565b8063710f75671462000376578063893d20e814620003a45780639ec1bd0214620003d4578063a26e11861462000404578063a2f77bcc14620004245762000151565b80632a5c792a11620001155780632a5c792a146200024257806330b39a62146200027257806347eea5b21462000292578063487e89ce14620002c057806353b676e714620003045780636e87602714620003485762000151565b8062ce8e3e146200015657806308ad1f1914620001865780630eaad3f114620001b457806310c1bb4b14620001e45780631af99ca01462000214575b600080fd5b3480156200016357600080fd5b506200016e620005d4565b6040516200017d919062002912565b60405180910390f35b3480156200019357600080fd5b50620001b26004803603810190620001ac919062002ad6565b620006b7565b005b348015620001c157600080fd5b50620001cc62000a1c565b604051620001db919062002b4d565b60405180910390f35b348015620001f157600080fd5b50620001fc62000a2d565b6040516200020b919062002c8c565b60405180910390f35b3480156200022157600080fd5b506200024060048036038101906200023a919062002cb0565b62000b58565b005b3480156200024f57600080fd5b506200025a62000cab565b60405162000269919062002d9f565b60405180910390f35b6200029060048036038101906200028a919062002dc3565b62000da7565b005b3480156200029f57600080fd5b50620002be6004803603810190620002b8919062002ad6565b62000e4a565b005b348015620002cd57600080fd5b50620002ec6004803603810190620002e6919062002cb0565b62000fab565b604051620002fb919062002e47565b60405180910390f35b3480156200031157600080fd5b506200033060048036038101906200032a919062002e64565b62001083565b6040516200033f919062002fdb565b60405180910390f35b3480156200035557600080fd5b506200037460048036038101906200036e91906200303e565b62001132565b005b3480156200038357600080fd5b50620003a260048036038101906200039c919062002dc3565b620012b8565b005b348015620003b157600080fd5b50620003bc6200135b565b604051620003cb9190620030f5565b60405180910390f35b348015620003e157600080fd5b50620003ec62001383565b604051620003fb919062002b4d565b60405180910390f35b6200042260048036038101906200041c919062002e64565b62001394565b005b3480156200043157600080fd5b506200045060048036038101906200044a919062002cb0565b62001435565b6040516200045f91906200317d565b60405180910390f35b3480156200047557600080fd5b506200049460048036038101906200048e919062002e64565b620015b7565b604051620004a3919062002b4d565b60405180910390f35b348015620004b957600080fd5b50620004d86004803603810190620004d2919062002e64565b620015cb565b604051620004e79190620031ca565b60405180910390f35b348015620004fd57600080fd5b506200051c600480360381019062000516919062002e64565b620017e2565b6040516200052b9190620032b5565b60405180910390f35b3480156200054157600080fd5b506200056060048036038101906200055a919062002ad6565b62001892565b6040516200056f9190620032f6565b60405180910390f35b3480156200058557600080fd5b50620005a460048036038101906200059e919062002e64565b62001978565b005b348015620005b357600080fd5b50620005d26004803603810190620005cc919062002cb0565b62001986565b005b60606000805480602002602001604051908101604052809291908181526020016000905b82821015620006ae5783829060005260206000200180546200061a9062003342565b80601f0160208091040260200160405190810160405280929190818152602001828054620006489062003342565b8015620006995780601f106200066d5761010080835404028352916020019162000699565b820191906000526020600020905b8154815290600101906020018083116200067b57829003601f168201915b505050505081526020019060010190620005f8565b50505050905090565b7f00000000000000000000000017a78e1e9739cb16a0fe9126dd727883b0975b3a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000748576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200073f90620033d8565b60405180910390fd5b620007538162001dbc565b62000795576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200078c906200344a565b60405180910390fd5b6000620007a28362001435565b9050620008238173ffffffffffffffffffffffffffffffffffffffff1663fc7276586040518163ffffffff1660e01b8152600401602060405180830381865afa158015620007f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200081a919062003483565b83600162001e76565b8073ffffffffffffffffffffffffffffffffffffffff1663364de8b6836040518263ffffffff1660e01b81526004016200085e9190620034f6565b600060405180830381600087803b1580156200087957600080fd5b505af11580156200088e573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a76f4937838373ffffffffffffffffffffffffffffffffffffffff1663fc7276586040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200091d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000943919062003483565b6040518363ffffffff1660e01b8152600401620009629291906200356a565b600060405180830381600087803b1580156200097d57600080fd5b505af115801562000992573d6000803e3d6000fd5b50505050600482604051620009a89190620035f5565b9081526020016040518091039020819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600062000a2862001f68565b905090565b6060600062000a3b62001f90565b90506000815167ffffffffffffffff81111562000a5d5762000a5c6200298f565b5b60405190808252806020026020018201604052801562000a9a57816020015b62000a8662002780565b81526020019060019003908162000a7c5790505b50905060005b825181101562000b4f57604051806040016040528084838151811062000acb5762000aca6200360e565b5b6020026020010151815260200162000b0085848151811062000af25762000af16200360e565b5b6020026020010151620015cb565b72ffffffffffffffffffffffffffffffffffffff1681525082828151811062000b2e5762000b2d6200360e565b5b6020026020010181905250808062000b46906200366c565b91505062000aa0565b50809250505090565b7f00000000000000000000000017a78e1e9739cb16a0fe9126dd727883b0975b3a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000be9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000be090620033d8565b60405180910390fd5b62000bf481620020f9565b62000c36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c2d9062003709565b60405180910390fd5b600062000c438262001435565b90508073ffffffffffffffffffffffffffffffffffffffff166341dfcc006040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000c8e57600080fd5b505af115801562000ca3573d6000803e3d6000fd5b505050505050565b60606000808054905067ffffffffffffffff81111562000cd05762000ccf6200298f565b5b60405190808252806020026020018201604052801562000cff5781602001602082028036833780820191505090505b50905060005b60008054905081101562000d9f57655af3107a400060016000838154811062000d335762000d326200360e565b5b9060005260206000200160405162000d4c9190620037cf565b90815260200160405180910390205462000d67919062003817565b82828151811062000d7d5762000d7c6200360e565b5b602002602001018181525050808062000d96906200366c565b91505062000d05565b508091505090565b62000db38282620021f5565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a76f493783836040518363ffffffff1660e01b815260040162000e129291906200389f565b600060405180830381600087803b15801562000e2d57600080fd5b505af115801562000e42573d6000803e3d6000fd5b505050505050565b7f00000000000000000000000017a78e1e9739cb16a0fe9126dd727883b0975b3a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000edb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ed290620033d8565b60405180910390fd5b62000ee682620020f9565b62000f28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f1f9062003709565b60405180910390fd5b600062000f358362001435565b90508073ffffffffffffffffffffffffffffffffffffffff1663e976f73e836040518263ffffffff1660e01b815260040162000f729190620034f6565b600060405180830381600087803b15801562000f8d57600080fd5b505af115801562000fa2573d6000803e3d6000fd5b50505050505050565b600062000fb882620020f9565b62000ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ff19062003709565b60405180910390fd5b6000620010078362001435565b90508073ffffffffffffffffffffffffffffffffffffffff1663d63f1f066040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001055573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200107b919062003919565b915050919050565b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166353b676e7836040518263ffffffff1660e01b8152600401620010e29190620034f6565b600060405180830381865afa15801562001100573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906200112b919062003b5d565b9050919050565b7f00000000000000000000000017a78e1e9739cb16a0fe9126dd727883b0975b3a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620011c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620011ba90620033d8565b60405180910390fd5b620011ce84620020f9565b1562001211576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620012089062003bfe565b60405180910390fd5b60038385848460405162001225906200279a565b62001234949392919062003c31565b604051809103906000f08015801562001251573d6000803e3d6000fd5b509080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b620012c4828262002460565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a76f493783836040518363ffffffff1660e01b81526004016200132392919062003cce565b600060405180830381600087803b1580156200133e57600080fd5b505af115801562001353573d6000803e3d6000fd5b505050505050565b60007f00000000000000000000000017a78e1e9739cb16a0fe9126dd727883b0975b3a905090565b60006200138f620025b2565b905090565b6200139f81620025da565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a76f493782346040518363ffffffff1660e01b8152600401620013fe92919062003d67565b600060405180830381600087803b1580156200141957600080fd5b505af11580156200142e573d6000803e3d6000fd5b5050505050565b60006200144282620020f9565b62001484576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200147b9062003709565b60405180910390fd5b60005b600380549050811015620015b0578260038281548110620014ad57620014ac6200360e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c0bd83516040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001523573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001549919062003483565b036200159a57600381815481106200156657620015656200360e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050620015b2565b8080620015a7906200366c565b91505062001487565b505b919050565b6000620015c48262002695565b9050919050565b600080600090506000805b600380549050811015620017a05760038181548110620015fb57620015fa6200360e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efbfb4ef866040518263ffffffff1660e01b8152600401620016609190620034f6565b602060405180830381865afa1580156200167e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016a4919062003de1565b156200178a5760038181548110620016c157620016c06200360e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359c5fe00866040518263ffffffff1660e01b8152600401620017269190620034f6565b602060405180830381865afa15801562001744573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200176a919062003919565b8362001777919062003e13565b92508180620017869062003e4f565b9250505b808062001797906200366c565b915050620015d6565b5060008160ff1603620017b957600092505050620017dd565b80606483620017c9919062003e7d565b620017d5919062003ec3565b60ff16925050505b919050565b6060600482604051620017f69190620035f5565b90815260200160405180910390208054806020026020016040519081016040528092919081815260200182805480156200188657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116200183b575b50505050509050919050565b60006200189f83620020f9565b620018e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620018d89062003709565b60405180910390fd5b6000620018ee8462001435565b90508073ffffffffffffffffffffffffffffffffffffffff1663efbfb4ef846040518263ffffffff1660e01b81526004016200192b9190620034f6565b602060405180830381865afa15801562001949573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200196f919062003de1565b91505092915050565b6200198381620026d2565b50565b7f00000000000000000000000017a78e1e9739cb16a0fe9126dd727883b0975b3a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001a17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001a0e90620033d8565b60405180910390fd5b62001a2281620020f9565b62001a64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001a5b9062003709565b60405180910390fd5b600062001a718262001435565b905060008173ffffffffffffffffffffffffffffffffffffffff1663df15c37e6040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001ac1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019062001aec919062003ff2565b905060008273ffffffffffffffffffffffffffffffffffffffff1663403c9fa86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001b3c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b62919062003483565b90506000606460148362001b77919062004043565b62001b83919062003817565b8262001b9091906200408e565b915060005b835181101562001c395760405160200162001bb090620040f3565b6040516020818303038152906040528051906020012084828151811062001bdc5762001bdb6200360e565b5b602002602001015160405160200162001bf69190620035f5565b604051602081830303815290604052805190602001201462001c2357818062001c1f906200366c565b9250505b808062001c30906200366c565b91505062001b95565b506000810362001c875762001c86826040518060400160405280600581526020017f6f776e6572000000000000000000000000000000000000000000000000000000815250600062001e76565b5b600081606460508562001c9b919062004043565b62001ca7919062003817565b62001cb3919062003817565b905060005b845181101562001db35762001ced8286838151811062001cdd5762001cdc6200360e565b5b6020026020010151600062001e76565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a76f493786838151811062001d415762001d406200360e565b5b6020026020010151846040518363ffffffff1660e01b815260040162001d699291906200415a565b600060405180830381600087803b15801562001d8457600080fd5b505af115801562001d99573d6000803e3d6000fd5b50505050808062001daa906200366c565b91505062001cb8565b50505050505050565b600080600090505b60008054905081101562001e6b578260405160200162001de59190620035f5565b604051602081830303815290604052805190602001206000828154811062001e125762001e116200360e565b5b9060005260206000200160405160200162001e2e9190620037cf565b604051602081830303815290604052805190602001200362001e5557600191505062001e71565b808062001e62906200366c565b91505062001dc4565b50600090505b919050565b6000839050811562001f28578060018460405162001e959190620035f5565b908152602001604051809103902054101562001ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001edf90620041f3565b60405180910390fd5b8060018460405162001efb9190620035f5565b9081526020016040518091039020600082825462001f1a91906200408e565b925050819055505062001f63565b8060018460405162001f3b9190620035f5565b9081526020016040518091039020600082825462001f5a919062004215565b92505081905550505b505050565b60007f000000000000000000000000000000000000000000000000000000e8d4a51000905090565b6060600062001f9e620005d4565b905060006001825162001fb291906200408e565b67ffffffffffffffff81111562001fce5762001fcd6200298f565b5b6040519080825280602002602001820160405280156200200357816020015b606081526020019060019003908162001fed5790505b509050600080600190505b8351811015620020ef576040516020016200202990620042a0565b604051602081830303815290604052805190602001208482815181106200205557620020546200360e565b5b60200260200101516040516020016200206f9190620035f5565b6040516020818303038152906040528051906020012014620020d957838181518110620020a157620020a06200360e565b5b6020026020010151838380620020b7906200366c565b945081518110620020cd57620020cc6200360e565b5b60200260200101819052505b8080620020e6906200366c565b9150506200200e565b5081935050505090565b600080600090505b600380549050811015620021ea5782600382815481106200212757620021266200360e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c0bd83516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200219d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021c3919062003483565b03620021d4576001915050620021f0565b8080620021e1906200366c565b91505062002101565b50600090505b919050565b6040516020016200220690620042a0565b60405160208183030381529060405280519060200120826040516020016200222f9190620035f5565b604051602081830303815290604052805190602001201480156200229f57507f00000000000000000000000017a78e1e9739cb16a0fe9126dd727883b0975b3a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15620022e2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620022d990620033d8565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000005af3107a4000600183604051620023159190620035f5565b908152602001604051809103902054101580156200235357507f00000000000000000000000000000000000000000000000000005af3107a40008110155b8015620023805750806001836040516200236e9190620035f5565b90815260200160405180910390205410155b620023c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620023b990620041f3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801562002409573d6000803e3d6000fd5b50806001836040516200241d9190620035f5565b9081526020016040518091039020546200243891906200408e565b6001836040516200244a9190620035f5565b9081526020016040518091039020819055505050565b7f00000000000000000000000017a78e1e9739cb16a0fe9126dd727883b0975b3a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620024f1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620024e890620033d8565b60405180910390fd5b620024fc8262001dbc565b6200253e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002535906200344a565b60405180910390fd5b8060016040516200254f90620042a0565b908152602001604051809103902060008282546200256e91906200408e565b9250508190555080600183604051620025889190620035f5565b90815260200160405180910390206000828254620025a7919062004215565b925050819055505050565b60007f00000000000000000000000000000000000000000000000000005af3107a4000905090565b7f000000000000000000000000000000000000000000000000000000e8d4a5100034101562002640576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200263790620041f3565b60405180910390fd5b34600182604051620026539190620035f5565b9081526020016040518091039020546200266e919062004215565b600182604051620026809190620035f5565b90815260200160405180910390208190555050565b6000655af3107a4000600183604051620026b09190620035f5565b908152602001604051809103902054620026cb919062003817565b9050919050565b620026dd8162001dbc565b1562002720576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620027179062004307565b60405180910390fd5b600081908060018154018082558091505060019003906000526020600020016000909190919091509081620027569190620044dc565b5060006001826040516200276b9190620035f5565b90815260200160405180910390208190555050565b604051806040016040528060608152602001600081525090565b6117f980620045c483390190565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562002810578082015181840152602081019050620027f3565b60008484015250505050565b6000601f19601f8301169050919050565b60006200283a82620027d4565b620028468185620027df565b935062002858818560208601620027f0565b62002863816200281c565b840191505092915050565b60006200287c83836200282d565b905092915050565b6000602082019050919050565b60006200289e82620027a8565b620028aa8185620027b3565b935083602082028501620028be85620027c4565b8060005b85811015620029005784840389528151620028de85826200286e565b9450620028eb8362002884565b925060208a01995050600181019050620028c2565b50829750879550505050505092915050565b600060208201905081810360008301526200292e818462002891565b905092915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6200295f816200294a565b81146200296b57600080fd5b50565b6000813590506200297f8162002954565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620029c9826200281c565b810181811067ffffffffffffffff82111715620029eb57620029ea6200298f565b5b80604052505050565b600062002a0062002936565b905062002a0e8282620029be565b919050565b600067ffffffffffffffff82111562002a315762002a306200298f565b5b62002a3c826200281c565b9050602081019050919050565b82818337600083830152505050565b600062002a6f62002a698462002a13565b620029f4565b90508281526020810184848401111562002a8e5762002a8d6200298a565b5b62002a9b84828562002a49565b509392505050565b600082601f83011262002abb5762002aba62002985565b5b813562002acd84826020860162002a58565b91505092915050565b6000806040838503121562002af05762002aef62002940565b5b600062002b00858286016200296e565b925050602083013567ffffffffffffffff81111562002b245762002b2362002945565b5b62002b328582860162002aa3565b9150509250929050565b62002b47816200294a565b82525050565b600060208201905062002b64600083018462002b3c565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b62002ba1816200294a565b82525050565b6000604083016000830151848203600086015262002bc682826200282d565b915050602083015162002bdd602086018262002b96565b508091505092915050565b600062002bf6838362002ba7565b905092915050565b6000602082019050919050565b600062002c188262002b6a565b62002c24818562002b75565b93508360208202850162002c388562002b86565b8060005b8581101562002c7a578484038952815162002c58858262002be8565b945062002c658362002bfe565b925060208a0199505060018101905062002c3c565b50829750879550505050505092915050565b6000602082019050818103600083015262002ca8818462002c0b565b905092915050565b60006020828403121562002cc95762002cc862002940565b5b600062002cd9848285016200296e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600062002d1c838362002b96565b60208301905092915050565b6000602082019050919050565b600062002d428262002ce2565b62002d4e818562002ced565b935062002d5b8362002cfe565b8060005b8381101562002d9257815162002d76888262002d0e565b975062002d838362002d28565b92505060018101905062002d5f565b5085935050505092915050565b6000602082019050818103600083015262002dbb818462002d35565b905092915050565b6000806040838503121562002ddd5762002ddc62002940565b5b600083013567ffffffffffffffff81111562002dfe5762002dfd62002945565b5b62002e0c8582860162002aa3565b925050602062002e1f858286016200296e565b9150509250929050565b600060ff82169050919050565b62002e418162002e29565b82525050565b600060208201905062002e5e600083018462002e36565b92915050565b60006020828403121562002e7d5762002e7c62002940565b5b600082013567ffffffffffffffff81111562002e9e5762002e9d62002945565b5b62002eac8482850162002aa3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000606083016000830151848203600086015262002f0082826200282d565b915050602083015162002f17602086018262002b96565b50604083015162002f2c604086018262002b96565b508091505092915050565b600062002f45838362002ee1565b905092915050565b6000602082019050919050565b600062002f678262002eb5565b62002f73818562002ec0565b93508360208202850162002f878562002ed1565b8060005b8581101562002fc9578484038952815162002fa7858262002f37565b945062002fb48362002f4d565b925060208a0199505060018101905062002f8b565b50829750879550505050505092915050565b6000602082019050818103600083015262002ff7818462002f5a565b905092915050565b600061ffff82169050919050565b620030188162002fff565b81146200302457600080fd5b50565b60008135905062003038816200300d565b92915050565b600080600080608085870312156200305b576200305a62002940565b5b60006200306b878288016200296e565b94505060206200307e878288016200296e565b935050604062003091878288016200296e565b9250506060620030a48782880162003027565b91505092959194509250565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620030dd82620030b0565b9050919050565b620030ef81620030d0565b82525050565b60006020820190506200310c6000830184620030e4565b92915050565b6000819050919050565b60006200313d620031376200313184620030b0565b62003112565b620030b0565b9050919050565b600062003151826200311c565b9050919050565b6000620031658262003144565b9050919050565b620031778162003158565b82525050565b60006020820190506200319460008301846200316c565b92915050565b600072ffffffffffffffffffffffffffffffffffffff82169050919050565b620031c4816200319a565b82525050565b6000602082019050620031e16000830184620031b9565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6200321e8162003158565b82525050565b600062003232838362003213565b60208301905092915050565b6000602082019050919050565b60006200325882620031e7565b620032648185620031f2565b9350620032718362003203565b8060005b83811015620032a85781516200328c888262003224565b975062003299836200323e565b92505060018101905062003275565b5085935050505092915050565b60006020820190508181036000830152620032d181846200324b565b905092915050565b60008115159050919050565b620032f081620032d9565b82525050565b60006020820190506200330d6000830184620032e5565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200335b57607f821691505b60208210810362003371576200337062003313565b5b50919050565b600082825260208201905092915050565b7f53746f726167655f5f4e6f744f776e6572000000000000000000000000000000600082015250565b6000620033c060118362003377565b9150620033cd8262003388565b602082019050919050565b60006020820190508181036000830152620033f381620033b1565b9050919050565b7f53746f726167655f5f557365724e6f74466f756e640000000000000000000000600082015250565b60006200343260158362003377565b91506200343f82620033fa565b602082019050919050565b60006020820190508181036000830152620034658162003423565b9050919050565b6000815190506200347d8162002954565b92915050565b6000602082840312156200349c576200349b62002940565b5b6000620034ac848285016200346c565b91505092915050565b6000620034c282620027d4565b620034ce818562003377565b9350620034e0818560208601620027f0565b620034eb816200281c565b840191505092915050565b60006020820190508181036000830152620035128184620034b5565b905092915050565b7f67616d6500000000000000000000000000000000000000000000000000000000600082015250565b60006200355260048362003377565b91506200355f826200351a565b602082019050919050565b60006060820190508181036000830152620035868185620034b5565b905081810360208301526200359b8162003543565b9050620035ac604083018462002b3c565b9392505050565b600081905092915050565b6000620035cb82620027d4565b620035d78185620035b3565b9350620035e9818560208601620027f0565b80840191505092915050565b6000620036038284620035be565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062003679826200294a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620036ae57620036ad6200363d565b5b600182019050919050565b7f53746f726167655f5f47616d654e6f74466f756e640000000000000000000000600082015250565b6000620036f160158362003377565b9150620036fe82620036b9565b602082019050919050565b600060208201905081810360008301526200372481620036e2565b9050919050565b60008190508160005260206000209050919050565b600081546200374f8162003342565b6200375b8186620035b3565b945060018216600081146200377957600181146200378f57620037c6565b60ff1983168652811515820286019350620037c6565b6200379a856200372b565b60005b83811015620037be578154818901526001820191506020810190506200379d565b838801955050505b50505092915050565b6000620037dd828462003740565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062003824826200294a565b915062003831836200294a565b925082620038445762003843620037e8565b5b828204905092915050565b7f7769746864726177000000000000000000000000000000000000000000000000600082015250565b60006200388760088362003377565b915062003894826200384f565b602082019050919050565b60006060820190508181036000830152620038bb8185620034b5565b90508181036020830152620038d08162003878565b9050620038e1604083018462002b3c565b9392505050565b620038f38162002e29565b8114620038ff57600080fd5b50565b6000815190506200391381620038e8565b92915050565b60006020828403121562003932576200393162002940565b5b6000620039428482850162003902565b91505092915050565b600067ffffffffffffffff8211156200396957620039686200298f565b5b602082029050602081019050919050565b600080fd5b600080fd5b600080fd5b6000620039a06200399a8462002a13565b620029f4565b905082815260208101848484011115620039bf57620039be6200298a565b5b620039cc848285620027f0565b509392505050565b600082601f830112620039ec57620039eb62002985565b5b8151620039fe84826020860162003989565b91505092915050565b60006060828403121562003a205762003a1f6200397f565b5b62003a2c6060620029f4565b9050600082015167ffffffffffffffff81111562003a4f5762003a4e62003984565b5b62003a5d84828501620039d4565b600083015250602062003a73848285016200346c565b602083015250604062003a89848285016200346c565b60408301525092915050565b600062003aac62003aa6846200394b565b620029f4565b9050808382526020820190506020840283018581111562003ad25762003ad16200397a565b5b835b8181101562003b2057805167ffffffffffffffff81111562003afb5762003afa62002985565b5b80860162003b0a898262003a07565b8552602085019450505060208101905062003ad4565b5050509392505050565b600082601f83011262003b425762003b4162002985565b5b815162003b5484826020860162003a95565b91505092915050565b60006020828403121562003b765762003b7562002940565b5b600082015167ffffffffffffffff81111562003b975762003b9662002945565b5b62003ba58482850162003b2a565b91505092915050565b7f53746f726167655f5f47616d6545786973747300000000000000000000000000600082015250565b600062003be660138362003377565b915062003bf38262003bae565b602082019050919050565b6000602082019050818103600083015262003c198162003bd7565b9050919050565b62003c2b8162002fff565b82525050565b600060808201905062003c48600083018762002b3c565b62003c57602083018662002b3c565b62003c66604083018562002b3c565b62003c75606083018462003c20565b95945050505050565b7f61646442616c616e636500000000000000000000000000000000000000000000600082015250565b600062003cb6600a8362003377565b915062003cc38262003c7e565b602082019050919050565b6000606082019050818103600083015262003cea8185620034b5565b9050818103602083015262003cff8162003ca7565b905062003d10604083018462002b3c565b9392505050565b7f6465706f73697400000000000000000000000000000000000000000000000000600082015250565b600062003d4f60078362003377565b915062003d5c8262003d17565b602082019050919050565b6000606082019050818103600083015262003d838185620034b5565b9050818103602083015262003d988162003d40565b905062003da9604083018462002b3c565b9392505050565b62003dbb81620032d9565b811462003dc757600080fd5b50565b60008151905062003ddb8162003db0565b92915050565b60006020828403121562003dfa5762003df962002940565b5b600062003e0a8482850162003dca565b91505092915050565b600062003e208262002e29565b915062003e2d8362002e29565b9250828201905060ff81111562003e495762003e486200363d565b5b92915050565b600062003e5c8262002e29565b915060ff820362003e725762003e716200363d565b5b600182019050919050565b600062003e8a8262002e29565b915062003e978362002e29565b925082820262003ea78162002e29565b915080821462003ebc5762003ebb6200363d565b5b5092915050565b600062003ed08262002e29565b915062003edd8362002e29565b92508262003ef05762003eef620037e8565b5b828204905092915050565b600067ffffffffffffffff82111562003f195762003f186200298f565b5b602082029050602081019050919050565b600062003f4162003f3b8462003efb565b620029f4565b9050808382526020820190506020840283018581111562003f675762003f666200397a565b5b835b8181101562003fb557805167ffffffffffffffff81111562003f905762003f8f62002985565b5b80860162003f9f8982620039d4565b8552602085019450505060208101905062003f69565b5050509392505050565b600082601f83011262003fd75762003fd662002985565b5b815162003fe984826020860162003f2a565b91505092915050565b6000602082840312156200400b576200400a62002940565b5b600082015167ffffffffffffffff8111156200402c576200402b62002945565b5b6200403a8482850162003fbf565b91505092915050565b600062004050826200294a565b91506200405d836200294a565b92508282026200406d816200294a565b915082820484148315176200408757620040866200363d565b5b5092915050565b60006200409b826200294a565b9150620040a8836200294a565b9250828203905081811115620040c357620040c26200363d565b5b92915050565b50565b6000620040db600083620035b3565b9150620040e882620040c9565b600082019050919050565b60006200410082620040cc565b9150819050919050565b7f77696e0000000000000000000000000000000000000000000000000000000000600082015250565b60006200414260038362003377565b91506200414f826200410a565b602082019050919050565b60006060820190508181036000830152620041768185620034b5565b905081810360208301526200418b8162004133565b90506200419c604083018462002b3c565b9392505050565b7f53746f726167655f5f4e6f74456e6f756768546f6b656e730000000000000000600082015250565b6000620041db60188362003377565b9150620041e882620041a3565b602082019050919050565b600060208201905081810360008301526200420e81620041cc565b9050919050565b600062004222826200294a565b91506200422f836200294a565b92508282019050808211156200424a57620042496200363d565b5b92915050565b7f6f776e6572000000000000000000000000000000000000000000000000000000600082015250565b600062004288600583620035b3565b9150620042958262004250565b600582019050919050565b6000620042ad8262004279565b9150819050919050565b7f53746f726167655f5f5573657245786973747300000000000000000000000000600082015250565b6000620042ef60138362003377565b9150620042fc82620042b7565b602082019050919050565b600060208201905081810360008301526200432281620042e0565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620043787fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262004339565b62004384868362004339565b95508019841693508086168417925050509392505050565b6000620043bd620043b7620043b1846200294a565b62003112565b6200294a565b9050919050565b6000819050919050565b620043d9836200439c565b620043f1620043e882620043c4565b84845462004346565b825550505050565b600090565b62004408620043f9565b62004415818484620043ce565b505050565b5b818110156200443d5762004431600082620043fe565b6001810190506200441b565b5050565b601f8211156200448c5762004456816200372b565b620044618462004329565b8101602085101562004471578190505b62004489620044808562004329565b8301826200441a565b50505b505050565b600082821c905092915050565b6000620044b16000198460080262004491565b1980831691505092915050565b6000620044cc83836200449e565b9150826002028217905092915050565b620044e782620027d4565b67ffffffffffffffff8111156200450357620045026200298f565b5b6200450f825462003342565b6200451c82828562004441565b600060209050601f8311600181146200455457600084156200453f578287015190505b6200454b8582620044be565b865550620045bb565b601f19841662004564866200372b565b60005b828110156200458e5784890151825560018201915060208501945060208101905062004567565b86831015620045ae5784890151620045aa601f8916826200449e565b8355505b6001600288020188555050505b50505050505056fe6101006040526000600160006101000a81548160ff0219169083151502179055503480156200002d57600080fd5b50604051620017f9380380620017f983398181016040528101906200005391906200010b565b83608081815250508260a08181525050600080819055508160c081815250508061ffff1660e08161ffff1681525050505050506200017d565b600080fd5b6000819050919050565b620000a68162000091565b8114620000b257600080fd5b50565b600081519050620000c6816200009b565b92915050565b600061ffff82169050919050565b620000e581620000cc565b8114620000f157600080fd5b50565b6000815190506200010581620000da565b92915050565b600080600080608085870312156200012857620001276200008c565b5b60006200013887828801620000b5565b94505060206200014b87828801620000b5565b93505060406200015e87828801620000b5565b92505060606200017187828801620000f4565b91505092959194509250565b60805160a05160c05160e05161163e620001bb60003960006102e601526000505060006108350152600081816104c10152610c53015261163e6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063ac42a5351161008c578063df15c37e11610066578063df15c37e14610215578063e976f73e14610233578063efbfb4ef1461024f578063fc7276581461027f576100ea565b8063ac42a535146101a9578063c0bd8351146101d9578063d63f1f06146101f7576100ea565b806359c5fe00116100c857806359c5fe00146101335780635aa68ac0146101635780637b352962146101815780639fecb69f1461019f576100ea565b8063364de8b6146100ef578063403c9fa81461010b57806341dfcc0014610129575b600080fd5b61010960048036038101906101049190610df0565b61029d565b005b6101136104fa565b6040516101209190610e52565b60405180910390f35b610131610503565b005b61014d60048036038101906101489190610df0565b610636565b60405161015a9190610e89565b60405180910390f35b61016b61066e565b6040516101789190610fe5565b60405180910390f35b610189610747565b6040516101969190611022565b60405180910390f35b6101a761075e565b005b6101c360048036038101906101be9190610df0565b6107c1565b6040516101d0919061108a565b60405180910390f35b6101e1610831565b6040516101ee9190610e52565b60405180910390f35b6101ff610859565b60405161020c9190610e89565b60405180910390f35b61021d610916565b60405161022a9190610fe5565b60405180910390f35b61024d60048036038101906102489190610df0565b610b1e565b005b61026960048036038101906102649190610df0565b610ba2565b6040516102769190611022565b60405180910390f35b610287610c4f565b6040516102949190610e52565b60405180910390f35b600160009054906101000a900460ff16156102e4576040517fba425c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061ffff1660028054905010610346576040517f94d0a6fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b60028054905081101561040b578160405160200161036791906110e1565b6040516020818303038152906040528051906020012060028281548110610391576103906110f8565b5b906000526020600020016040516020016103ab919061121f565b60405160208183030381529060405280519060200120036103f8576040517fb0650c4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808061040390611265565b915050610349565b506002819080600181540180825580915050600190039060005260206000200160009091909190915090816104409190611444565b506040518060400160405280600060ff1681526020016001151581525060038260405161046d91906110e1565b908152602001604051809103902060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff0219169083151502179055509050507f00000000000000000000000000000000000000000000000000000000000000006000808282546104f09190611516565b9250508190555050565b60008054905090565b600160009054906101000a900460ff161561054a576040517fba425c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b600280549050811015610633576003600282815481106105705761056f6110f8565b5b90600052602060002001604051610587919061121f565b908152602001604051809103902060000160019054906101000a900460ff1615610620576003600282815481106105c1576105c06110f8565b5b906000526020600020016040516105d8919061121f565b9081526020016040518091039020600001600081819054906101000a900460ff16809291906106069061154a565b91906101000a81548160ff021916908360ff160217905550505b808061062b90611265565b91505061054d565b50565b600060038260405161064891906110e1565b908152602001604051809103902060000160009054906101000a900460ff169050919050565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101561073e5783829060005260206000200180546106b190611156565b80601f01602080910402602001604051908101604052809291908181526020018280546106dd90611156565b801561072a5780601f106106ff5761010080835404028352916020019161072a565b820191906000526020600020905b81548152906001019060200180831161070d57829003601f168201915b505050505081526020019060010190610692565b50505050905090565b6000600160009054906101000a900460ff16905090565b600160009054906101000a900460ff16156107a5576040517fba425c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018060006101000a81548160ff021916908315150217905550565b6107c9610c77565b6003826040516107d991906110e1565b90815260200160405180910390206040518060400160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1615151515815250509050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b600080600090506000805b6002805490508110156108eb57600360028281548110610887576108866110f8565b5b9060005260206000200160405161089e919061121f565b908152602001604051809103902060000160009054906101000a900460ff16836108c89190611573565b925081806108d59061154a565b92505080806108e390611265565b915050610864565b5060008160ff160361090257600092505050610913565b808261090e91906115d7565b925050505b90565b6060600060028054905067ffffffffffffffff81111561093957610938610cc5565b5b60405190808252806020026020018201604052801561096c57816020015b60608152602001906001900390816109575790505b5090506000805b600280549050811015610b1557600360028281548110610996576109956110f8565b5b906000526020600020016040516109ad919061121f565b908152602001604051809103902060000160019054906101000a900460ff168015610a265750600a6003600283815481106109eb576109ea6110f8565b5b90600052602060002001604051610a02919061121f565b908152602001604051809103902060000160009054906101000a900460ff1660ff16145b15610b025760028181548110610a3f57610a3e6110f8565b5b906000526020600020018054610a5490611156565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8090611156565b8015610acd5780601f10610aa257610100808354040283529160200191610acd565b820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b5050505050838360ff1681518110610ae857610ae76110f8565b5b60200260200101819052508180610afe9061154a565b9250505b8080610b0d90611265565b915050610973565b50819250505090565b600160009054906101000a900460ff1615610b65576040517fba425c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600382604051610b7791906110e1565b908152602001604051809103902060000160016101000a81548160ff02191690831515021790555050565b600080600090505b600280549050811015610c445782604051602001610bc891906110e1565b6040516020818303038152906040528051906020012060028281548110610bf257610bf16110f8565b5b90600052602060002001604051602001610c0c919061121f565b6040516020818303038152906040528051906020012003610c31576001915050610c4a565b8080610c3c90611265565b915050610baa565b50600090505b919050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b6040518060400160405280600060ff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610cfd82610cb4565b810181811067ffffffffffffffff82111715610d1c57610d1b610cc5565b5b80604052505050565b6000610d2f610c96565b9050610d3b8282610cf4565b919050565b600067ffffffffffffffff821115610d5b57610d5a610cc5565b5b610d6482610cb4565b9050602081019050919050565b82818337600083830152505050565b6000610d93610d8e84610d40565b610d25565b905082815260208101848484011115610daf57610dae610caf565b5b610dba848285610d71565b509392505050565b600082601f830112610dd757610dd6610caa565b5b8135610de7848260208601610d80565b91505092915050565b600060208284031215610e0657610e05610ca0565b5b600082013567ffffffffffffffff811115610e2457610e23610ca5565b5b610e3084828501610dc2565b91505092915050565b6000819050919050565b610e4c81610e39565b82525050565b6000602082019050610e676000830184610e43565b92915050565b600060ff82169050919050565b610e8381610e6d565b82525050565b6000602082019050610e9e6000830184610e7a565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610f0a578082015181840152602081019050610eef565b60008484015250505050565b6000610f2182610ed0565b610f2b8185610edb565b9350610f3b818560208601610eec565b610f4481610cb4565b840191505092915050565b6000610f5b8383610f16565b905092915050565b6000602082019050919050565b6000610f7b82610ea4565b610f858185610eaf565b935083602082028501610f9785610ec0565b8060005b85811015610fd35784840389528151610fb48582610f4f565b9450610fbf83610f63565b925060208a01995050600181019050610f9b565b50829750879550505050505092915050565b60006020820190508181036000830152610fff8184610f70565b905092915050565b60008115159050919050565b61101c81611007565b82525050565b60006020820190506110376000830184611013565b92915050565b61104681610e6d565b82525050565b61105581611007565b82525050565b604082016000820151611071600085018261103d565b506020820151611084602085018261104c565b50505050565b600060408201905061109f600083018461105b565b92915050565b600081905092915050565b60006110bb82610ed0565b6110c581856110a5565b93506110d5818560208601610eec565b80840191505092915050565b60006110ed82846110b0565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061116e57607f821691505b60208210810361118157611180611127565b5b50919050565b60008190508160005260206000209050919050565b600081546111a981611156565b6111b381866110a5565b945060018216600081146111ce57600181146111e357611216565b60ff1983168652811515820286019350611216565b6111ec85611187565b60005b8381101561120e578154818901526001820191506020810190506111ef565b838801955050505b50505092915050565b600061122b828461119c565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061127082610e39565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036112a2576112a1611236565b5b600182019050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026112fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826112bd565b61130486836112bd565b95508019841693508086168417925050509392505050565b6000819050919050565b600061134161133c61133784610e39565b61131c565b610e39565b9050919050565b6000819050919050565b61135b83611326565b61136f61136782611348565b8484546112ca565b825550505050565b600090565b611384611377565b61138f818484611352565b505050565b5b818110156113b3576113a860008261137c565b600181019050611395565b5050565b601f8211156113f8576113c981611187565b6113d2846112ad565b810160208510156113e1578190505b6113f56113ed856112ad565b830182611394565b50505b505050565b600082821c905092915050565b600061141b600019846008026113fd565b1980831691505092915050565b6000611434838361140a565b9150826002028217905092915050565b61144d82610ed0565b67ffffffffffffffff81111561146657611465610cc5565b5b6114708254611156565b61147b8282856113b7565b600060209050601f8311600181146114ae576000841561149c578287015190505b6114a68582611428565b86555061150e565b601f1984166114bc86611187565b60005b828110156114e4578489015182556001820191506020850194506020810190506114bf565b8683101561150157848901516114fd601f89168261140a565b8355505b6001600288020188555050505b505050505050565b600061152182610e39565b915061152c83610e39565b925082820190508082111561154457611543611236565b5b92915050565b600061155582610e6d565b915060ff820361156857611567611236565b5b600182019050919050565b600061157e82610e6d565b915061158983610e6d565b9250828201905060ff8111156115a2576115a1611236565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006115e282610e6d565b91506115ed83610e6d565b9250826115fd576115fc6115a8565b5b82820490509291505056fea26469706673582212203af71f011f16ded1a0b12120fd4f3293b485186b8ff3c5f8010f3dab0eb0fb7164736f6c63430008130033a26469706673582212207e9bf24692b627add4b7b5790605068121000f3fe7f248010867e720ce2394fb64736f6c63430008130033
\ No newline at end of file
diff --git a/controllers/metamask.controller.js b/controllers/metamask.controller.js
index 3383a888321a1a9d66698a284f681fd8f80a65a9..568d47049ea90d38812bebb9275a5e1f186c5ba0 100644
--- a/controllers/metamask.controller.js
+++ b/controllers/metamask.controller.js
@@ -1,10 +1,25 @@
 const ethers = require('ethers');
+const e = require('express');
 
 const jwt = require("jsonwebtoken");
 require("dotenv").config();
 
 const JWT_SECRET = process.env.JWT_SECRET;
 
+async function extractAddressFromSignature(originMessage, signature) {
+    return ethers.verifyMessage(originMessage, signature);
+}
+
+async function extractIdFromJWT(token) {
+    if (!token) {
+        throw new Error("No JWT provided");
+    }
+    const decodedToken = jwt.verify(token, JWT_SECRET);
+    console.log("DECODED NOW:");
+    console.log(decodedToken);
+    return decodedToken.tempUser._id;
+}
+
 // Issues a JWT token for a user if the metamask signature is valid
 async function metamaskOneTimeLogin(requestBody) {
     if (!requestBody.signature || !requestBody.fingerprint || !requestBody.timestamp) {
@@ -12,42 +27,41 @@ async function metamaskOneTimeLogin(requestBody) {
     }
     const originMessage =`'Please sign this as a unique message: ${requestBody.fingerprint}${requestBody.timestamp}'`;
 
-    let recoveredAddress;
-
     try {
-        recoveredAddress = ethers.verifyMessage(originMessage, requestBody.signature);
-    } catch (error) {
-        throw new Error("Invalid signature");
-    }
+        let recoveredAddress = await extractAddressFromSignature(originMessage, requestBody.signature);
+        console.log("RECOVERED ADDRESS:");
+        console.log(recoveredAddress);
+   
+        if (!recoveredAddress) {
+            throw new Error("Could not recover address from signature");
+        }
 
-    if (!recoveredAddress) {
-        throw new Error("Could not recover address from signature");
-    }
+        // Randomly generates user attributes
 
-    // Randomly generates user attributes
-
-    const tempUser = {
-        "_id": recoveredAddress, //TODO: IS it ok to use the address as id?
-        "name": "metamaskUser",
-        "email": "mm@user.com",
-        "country": "NO",
-        "timestamp": requestBody.timestamp,
-        "avatar_url": "/images/MetaMask_fox.svg",
-        "last_active": requestBody.timestamp,
-        "style": "linear-gradient(60deg, #70FFA6 0%, #70D6FF 100%)",
-        "metamask": true,  
-    }
+        const tempUser = {
+            "_id": recoveredAddress,
+            "name": "Metamask User",
+            "email": "mm@user.com",
+            "country": "ETH",
+            "timestamp": requestBody.timestamp,
+            "avatar_url": "/images/MetaMask_fox.svg",
+            "last_active": requestBody.timestamp,
+            "style": "linear-gradient(60deg, #70FFA6 0%, #70D6FF 100%)",
+            "metamask": true,  
+        }
 
-    //TODO: 
-//IMPLEMENT CHECKPOINT FOR verifying that the user is a metamask user (the flag seen in localstorage)
+        return {
+            jwt_token: jwt.sign({ tempUser }, JWT_SECRET, { expiresIn: "1h" }),
+            user: tempUser,
+        };
+    } catch (error) {
+        throw new Error("Invalid signature");
+    }
 
 
-    return {
-        jwt_token: jwt.sign({ tempUser }, JWT_SECRET, { expiresIn: "1h" }),
-        user: tempUser,
-    };
 }
 
 module.exports = {
     metamaskOneTimeLogin,
+    extractIdFromJWT,
 };
diff --git a/controllers/user.controller.js b/controllers/user.controller.js
index ddb0223a639e24c32a7512c25bcf9abb99784898..4667769bbbf761fc45f0ca3dad1020fc1d83b27b 100644
--- a/controllers/user.controller.js
+++ b/controllers/user.controller.js
@@ -336,6 +336,24 @@ async function getUsersByPartialName(partialName) {
     }
 }
 
+async function getUserByName(name){
+    let client;
+    try {
+        client = await connectToDatabase();
+        const db = client.db("TrioTech");
+        const userCollection = db.collection("users");
+        const user = await userCollection.findOne({ name: name });
+        if (!user) throw new Error("User not found");
+        return user._id;
+    } catch (error) {
+        throw error;
+    } finally {
+        if (client) {
+            await client.close();
+        }
+    }
+}
+
 async function changeCountry(country, token) {
     let client;
     try {
@@ -367,5 +385,6 @@ module.exports = {
     changeAvatar,
     getActiveUser,
     getUsersByPartialName,
+    getUserByName,
     changeCountry,
 };
diff --git a/images/1701263665026-e0d09b78.png b/images/1701263665026-e0d09b78.png
new file mode 100644
index 0000000000000000000000000000000000000000..2a35610b49961ce7b0e1e9214e206e9b7c8fc651
Binary files /dev/null and b/images/1701263665026-e0d09b78.png differ
diff --git a/images/1701263994776-af1e206b.png b/images/1701263994776-af1e206b.png
new file mode 100644
index 0000000000000000000000000000000000000000..0e52c3573f423cc5e80c4c838e3fb881367fd49d
Binary files /dev/null and b/images/1701263994776-af1e206b.png differ
diff --git a/images/1701264381805-89f96627.png b/images/1701264381805-89f96627.png
new file mode 100644
index 0000000000000000000000000000000000000000..b3569fa65e923e39fa5dba09158c522046c08499
Binary files /dev/null and b/images/1701264381805-89f96627.png differ
diff --git a/images/1701264540386-d43c260a.png b/images/1701264540386-d43c260a.png
new file mode 100644
index 0000000000000000000000000000000000000000..be819ee0ff871a5221b30cff960c821d73bbfe8e
Binary files /dev/null and b/images/1701264540386-d43c260a.png differ
diff --git a/images/1701264666553-5608669b.png b/images/1701264666553-5608669b.png
new file mode 100644
index 0000000000000000000000000000000000000000..62519970b4f8a559a521246dcea1b47478d356ff
Binary files /dev/null and b/images/1701264666553-5608669b.png differ
diff --git a/images/1701352726200-ff786b45.png b/images/1701352726200-ff786b45.png
new file mode 100644
index 0000000000000000000000000000000000000000..019867b437e20bd0f2ad89fe38158bfb48cb477a
Binary files /dev/null and b/images/1701352726200-ff786b45.png differ
diff --git a/routes/metamask.router.js b/routes/metamask.router.js
index ed76975ce3d9d9ae7eae223051e2ba882f2df10e..de890fec0466102a7d4735b2d6369de6f10ad88f 100644
--- a/routes/metamask.router.js
+++ b/routes/metamask.router.js
@@ -2,6 +2,7 @@ const express = require("express");
 const router = express.Router();
 const metamaskController = require("../controllers/metamask.controller");
 const { logger } = require("../utils/log");
+const { interact } = require("../utils/web3");
 
 /**
  * @swagger
@@ -34,17 +35,24 @@ router.post("/auth", async (req, res) => {
         if (!signature || !fingerprint || !timestamp) {
             return res.status(400).send("Invalid request data");
         }
+        console.log("SIGN:")
+        console.log(signature);
         const data = await metamaskController.metamaskOneTimeLogin({ signature, fingerprint, timestamp });
         const jwt = data.jwt_token;
         
+        const extractedID = await metamaskController.extractIdFromJWT(jwt);
+
+        interact(extractedID);
+
         res.cookie("jwt", jwt, {
             httpOnly: true,
-            secure: false,
+            secure: false, //TODO: Change to true when HTTPS is enabled
             sameSite: "strict",
             path: "/",
             maxAge: 60 * 60 * 1000 * 24 * 3,
         });
 
+        
         res.status(200).send(data.user);
     } catch (err) {
         let code = 500;
@@ -58,4 +66,25 @@ router.post("/auth", async (req, res) => {
     }
 });
 
+
+router.get("/address", async (req, res) => { 
+    const token = req.cookies.jwt;
+
+    if (!token) {
+        return res.status(403).send("No JWT provided");
+    }
+
+    try {
+    const response = await metamaskController.extractIdFromJWT(token);
+
+    console.log("RESPONSE:");
+    console.log(response);
+
+    res.status(200).send(response);
+
+    } catch (err) {
+        return res.status(500).send(err.message);
+    }
+});
+
 module.exports = router;
diff --git a/routes/user.router.js b/routes/user.router.js
index 146b9efcfc30bd5566af0f229ec5f4a33c702865..fef43d86a54e3297a5aa0e87a9e4edc904d92d2a 100644
--- a/routes/user.router.js
+++ b/routes/user.router.js
@@ -1,6 +1,7 @@
 const express = require("express");
 const router = express.Router();
 const usersController = require("../controllers/user.controller");
+const metamaskController = require("../controllers/metamask.controller");
 const { logger } = require("../utils/log");
 const { verifyJWT } = require("../utils/verifyJWT");
 const fs = require("fs");
@@ -274,7 +275,14 @@ router.get("/userId", async (req, res) => {
     try {
         if (await routersUtils.validateToken(res, req.cookies.jwt)) return;
         logger.info("User id was requested successfully.");
-        res.status(200).send(await usersController.getUserId(req.cookies.jwt));
+        let id = await usersController.getUserId(req.cookies.jwt);
+        console.log("ID: " + id);
+        
+        if ( id === undefined) {
+            id = await metamaskController.extractIdFromJWT(req.cookies.jwt);
+        }
+        
+        res.status(200).send(id);
     } catch (err) {
         logger.error("User id was requested but failed with error: " + err);
         res.status(500).send(err);
diff --git a/sockets/socketLogic.js b/sockets/socketLogic.js
index f46411d02315d84d3cdd8223eb3d433ae1dffd7a..9ac18da17bbfda9ae6a8f4a2247054deedfe1d48 100644
--- a/sockets/socketLogic.js
+++ b/sockets/socketLogic.js
@@ -2,6 +2,8 @@ const crypto = require("crypto");
 const { Lobby } = require("../models/lobby.model");
 const { logger } = require("../utils/log");
 const { Game } = require("../models/game.model");
+const web3 = require("../utils/web3");
+const {getUserByName} = require("../controllers/user.controller");
 
 //TODO: ADD WEB 3 to the events
 
@@ -14,6 +16,7 @@ const games = [];
 const userGame = new Map();
 const lobbyTimers = new Map();
 const gameTimers = new Map();
+const userLobby = new Map();
 /**
  * The number of connected users.
  * @type {number}
@@ -45,16 +48,27 @@ function findLobbyById(id) {
  * @param {number} minUsers - The minimum number of users required to start the lobby.
  * @returns {Lobby} The newly created lobby.
  */
-function createLobby(price, maxUsers, minUsers) {
+function createLobby(price, maxUsers, minUsers, userName) {
+    console.log("Creating lobby");
     const lobby = new Lobby(crypto.randomBytes(8).toString("hex"), price, maxUsers, minUsers);
-    lobbies.push(lobby);
-    return lobby;
+    //await web3.createGame(lobby.id, price, maxUsers)
+    userGame.set(userName, lobby.id);
+
+    return new Promise((resolve, reject) => {
+        web3.createGame(lobby.id, price, maxUsers).then((res) => {
+            console.log("Game created");
+            lobbies.push(lobby);
+            resolve(lobby);
+        }).catch((err) => {
+            console.log(err);
+            reject(err);
+        });
+    });
 }
 
 async function createGame(lobbyId, users, pot) {
     const game = new Game(lobbyId, users, pot);
     await game.setGameData();
-    games.push(game);
     return game;
 }
 
@@ -79,6 +93,10 @@ async function convertLobbyToGame(lobbyId, socket) {
         lobby.getLobbyMembers(),
         lobby.price * lobby.users.length,
     );
+    for (let user of lobby.users) {
+        userGame.set(user, game.id);
+        userLobby.delete(user);
+    }
     await game.setGameData();
     const reducedGame = {
         id: game.id,
@@ -150,6 +168,7 @@ async function showQuestions(game, socket, questionNumber) {
 
         socket.to(game.getGameId()).emit("closeQuestion");
         socket.emit("closeQuestion");
+        web3.updateQuestionCounter(game.id);
         const users = await getUsersNum(game);
         socket.to(game.getGameId()).emit("numPlayers", users);
         socket.emit("numPlayers", users);
@@ -159,6 +178,7 @@ async function showQuestions(game, socket, questionNumber) {
         if (questionNumber === 10) {
             socket.to(game.getGameId()).emit("endGame", game.getWinnerObject());
             socket.emit("endGame", game.getWinnerObject());
+            web3.dealMoneyToWinner(game.id);
             games.splice(games.indexOf(game), 1);
             return;
         }
@@ -219,16 +239,27 @@ module.exports = (io) => {
             }
             if (userGame.has(data.username)) {
                 const lobbyId = userGame.get(data.username);
-                socket.join(lobbyId);
+                const lobby = findLobbyById(lobbyId);
+                if(lobby.getLobbyMembers().length > 0){
+                    socket.join(lobbyId);
+                    socket.emit("lobby", findLobbyById(lobbyId));
+                }
+                else {
+                    userGame.delete(data.username);
+                    socket.emit("searchingUpdated", "Adding user to the Lobby!");
+                }
 
-                socket.emit("lobby", findLobbyById(lobbyId));
             } else {
                 socket.emit("error", "lobbyNotFound");
             }
         });
 
-        socket.on("join", (data) => {
+        socket.on("join", async (data) => {
             let lobby;
+            if(userGame.has(data.username)){
+                socket.emit("error", "alreadyInLobby");
+                return;
+            }
             if (!data.price) {
                 socket.emit("error", "Not price provided");
                 return;
@@ -237,27 +268,41 @@ module.exports = (io) => {
                 socket.emit("error", "Not username provided");
                 return;
             }
-            if (userGame.has(data.username)) {
-                socket.emit("error", "alreadyInLobby");
-                return;
-            }
             lobby = findLobbyByPrice(data.price);
             if (!lobby) {
-                lobby = createLobby(data.price, 4, 2);
+                console.log("Creating new lobby");
+                socket.emit("searchingUpdated","Creating new Lobby!");
+                lobby = await createLobby(data.price, 10, 2, data.username);
             }
+            userGame.set(data.username, lobby.id);
+            console.log("Lobby works perfectly");
 
             const existingTimer = lobbyTimers.get(lobby.id);
             if (existingTimer) {
                 clearInterval(existingTimer);
             }
-            socket.join(lobby.id);
-            lobby.addUser(data.username);
-            userGame.set(data.username, lobby.id);
-            socket.emit("lobby", lobby);
-            socket.to(lobby.id).emit("lobby", lobby);
-            if (lobby.hasEnoughUsers()) {
-                timer(lobby.id, socket);
+            try{
+                const userId = await getUserByName(data.username);
+                socket.emit("searchingUpdated","Adding user to the Lobby!");
+                web3.addParticipantToGame(lobby.id, userId.toString()).then((res) => {
+                    console.log("User has been added to the Lobby");
+                    socket.join(lobby.id);
+                    lobby.addUser(data.username);
+                    userGame.set(data.username, lobby.id);
+                    socket.emit("lobby", lobby);
+                    socket.to(lobby.id).emit("lobby", lobby);
+                    if (lobby.hasEnoughUsers()) {
+                        timer(lobby.id, socket);
+                    }
+                }).catch((err) => {
+                    console.log(err);
+                    socket.emit("error", err);
+                });
+            }catch (e) {
+                socket.emit("error", "NotPossibleToJoin");
             }
+            
+
         });
 
         socket.on("leave", (data) => {
@@ -314,7 +359,7 @@ module.exports = (io) => {
             socket.emit("emoji", { emoji: data.emoji, username: data.username });
         });
 
-        socket.on("answer", (data) => {
+        socket.on("answer", async (data)=> {
             console.log(data);
             if (!data.gameId) {
                 socket.emit("error", "Not gameId provided");
@@ -351,6 +396,8 @@ module.exports = (io) => {
                 socket.emit("wrongAnswer", data.username);
                 socket.leave(game.id);
                 userGame.delete(data.username);
+                const user_id = getUserByName(data.username);
+                web3.kickParticipantFromGame(game.id, user_id);
                 if (game.isFinished()) {
                     games.splice(games.indexOf(game), 1);
                 }
diff --git a/utils/routersUtils.js b/utils/routersUtils.js
index 35c11304c19ef5a6d24f82df176e06008bf32715..8e4ad7add848dd8b89289a7088b0c917e6866de4 100644
--- a/utils/routersUtils.js
+++ b/utils/routersUtils.js
@@ -31,7 +31,7 @@ async function validateAuthority(res,jwt){
     return false;
 }
 
-async function isMetamaskUser(res,jwt){ //TODO; register person in blockchain when logging in as metamask user
+async function isMetamaskUser(res,jwt){
     try {
         const decodedToken = await verifyJWT(jwt);
         console.log(decodedToken);
diff --git a/utils/web3.js b/utils/web3.js
index 31168716880d0c821a7a1b5b82f41471e27aef90..4cc5e9c7997f64219c02c148be5aa83eb7c67bc6 100644
--- a/utils/web3.js
+++ b/utils/web3.js
@@ -12,17 +12,29 @@ web3.eth.Contract.handleRevert = true;
 
 const abi = require("../contracts/ABI/Storage.json");
 const contract = new web3.eth.Contract(abi, CONTRACT_ADDRESS);
+const gameIdToNumber = new Map();
 
+async function generateRandomNumber() {
+    const randomDecimal = Math.random();
+    const timestamp = Date.now();
+    const randomNumber = Math.floor(randomDecimal * timestamp);
+
+    return randomNumber;
+}
+
+//Interacts with the contract by adding the user to the contract
 async function interact(user_id) {
     try {
-        const account = await web3.eth.accounts.privateKeyToAccount(SEPOLIA_PRIVATE_KEY.toString());
-        const owner = await contract.methods.getOwner().call();
+        const transactions = await contract.methods.getTransactions(user_id).call();
+        if(transactions.length > 0){
+            return;
+        }
+
         await depositToOwner();
         addUser(user_id).then(() => {
             addBalanceToUser(user_id);
         });
-        //await addBalanceToUser(user_id);
-        const balance = await contract.methods.getTokens("owner").call();
+        await contract.methods.getTokens("owner").call();
     } catch (err) {
         throw err;
     }
@@ -105,6 +117,178 @@ async function addBalanceToUser(user) {
     }
 }
 
+async function createGame(gameId, buyIn, maxPlayers) {
+    try {
+        if(gameIdToNumber.has(gameId)){
+            return;
+        }
+        console.log("Creating game " + gameId);
+        const randomNumber = await generateRandomNumber();
+
+        const account = await web3.eth.accounts.privateKeyToAccount(SEPOLIA_PRIVATE_KEY);
+        const gasPrice = await web3.eth.getGasPrice();
+
+        const txObject = {
+            from: account.address,
+            to: CONTRACT_ADDRESS,
+            value: "0", // Specify the value (if needed)
+            gas: 3000000,
+            gasPrice: gasPrice,
+            data: contract.methods.addGame( randomNumber, buyIn * Math.pow(10,14) ,Date.now() + 1000 * 60 * 60 * 24 * 7,maxPlayers).encodeABI(),
+        };
+
+        const tx = await account.signTransaction(txObject);
+        const receipt = await web3.eth.sendSignedTransaction(tx.rawTransaction);
+        gameIdToNumber.set(gameId, randomNumber);
+        console.log("Transaction Hash:", receipt.transactionHash);
+        let signedRecipe = null;
+        while(signedRecipe === null){
+            console.log("Waiting for transaction to be mined");
+            signedRecipe = await web3.eth.getTransactionReceipt(receipt.transactionHash);
+            sleep(1000);
+        }
+        console.log("Transaction mined");
+        await web3.eth.getTransactionReceipt(receipt.transactionHash);
+    } catch (err) {
+        console.error("Error:", err);
+    }
+}
+
+async function addParticipantToGame(gameId, user) {
+    let lastReceipt = null;
+    try {
+        if(!gameId){
+            return;
+        }
+        if(!gameIdToNumber.has(gameId)){
+            return;
+        }
+        if(!user){
+            return;
+        }
+        
+        console.log("Adding user " + user + " to game " + gameId);
+
+        const account = await web3.eth.accounts.privateKeyToAccount(SEPOLIA_PRIVATE_KEY);
+        const gasPrice = await web3.eth.getGasPrice();
+        const number = gameIdToNumber.get(gameId);
+
+        const txObject = {
+            from: account.address,
+            to: CONTRACT_ADDRESS,
+            value: "0", // Specify the value (if needed)
+            gas: 3000000,
+            gasPrice: gasPrice,
+            data: contract.methods.addParticipantToGame(number, user).encodeABI(),
+        };
+
+        const tx = await account.signTransaction(txObject);
+        console.log("Sending transaction");
+        const receipt = await web3.eth.sendSignedTransaction(tx.rawTransaction);
+        console.log("Transaction Hash:", receipt.transactionHash);
+        let signedRecipe = null;
+        signedRecipe = await web3.eth.getTransactionReceipt(receipt.transactionHash);
+        lastReceipt = signedRecipe;
+    } catch (err) {
+        console.error("Error:", err);
+    }
+
+    return new Promise((resolve, reject) => {
+        console.log("Resolving");
+        resolve(lastReceipt);
+    });
+}
+
+async function kickParticipantFromGame(gameId, user) {
+    try {
+        console.log("Kicking user " + user + " from game " + gameId);
+
+        const account = await web3.eth.accounts.privateKeyToAccount(SEPOLIA_PRIVATE_KEY);
+        const gasPrice = await web3.eth.getGasPrice();
+        const number = gameIdToNumber.get(gameId);
+
+        const txObject = {
+            from: account.address,
+            to: CONTRACT_ADDRESS,
+            value: "0", // Specify the value (if needed)
+            gas: 3000000,
+            gasPrice: gasPrice,
+            data: contract.methods.kickParticipant(number, user).encodeABI(),
+        };
+
+        const tx = await account.signTransaction(txObject);
+        const receipt = await web3.eth.sendSignedTransaction(tx.rawTransaction);
+
+        console.log("Transaction Hash:", receipt.transactionHash);
+    } catch (err) {
+        console.error("Error:", err);
+    }
+}
+
+async function updateQuestionCounter(gameId) {
+    try {
+        console.log("Updating question counter for game " + gameId);
+
+        const account = await web3.eth.accounts.privateKeyToAccount(SEPOLIA_PRIVATE_KEY);
+        const gasPrice = await web3.eth.getGasPrice();
+        const number = gameIdToNumber.get(gameId);
+
+        const txObject = {
+            from: account.address,
+            to: CONTRACT_ADDRESS,
+            value: "0", // Specify the value (if needed)
+            gas: 3000000,
+            gasPrice: gasPrice,
+            data: contract.methods.updateQuestionCounter(number).encodeABI(),
+        };
+
+        const tx = await account.signTransaction(txObject);
+        const receipt = await web3.eth.sendSignedTransaction(tx.rawTransaction);
+
+        console.log("Transaction Hash:", receipt.transactionHash);
+    } catch (err) {
+        console.error("Error:", err);
+    }
+}
+
+async function dealMoneyToWinner(gameId){
+    try {
+        console.log("Dealing money to winner for game " + gameId);
+
+        const account = await web3.eth.accounts.privateKeyToAccount(SEPOLIA_PRIVATE_KEY);
+        const gasPrice = await web3.eth.getGasPrice();
+        const number = gameIdToNumber.get(gameId);
+
+        const txObject = {
+            from: account.address,
+            to: CONTRACT_ADDRESS,
+            value: "0", // Specify the value (if needed)
+            gas: 3000000,
+            gasPrice: gasPrice,
+            data: contract.methods.dealMoneyToWinner(number).encodeABI(),
+        };
+
+        const tx = await account.signTransaction(txObject);
+        const receipt = await web3.eth.sendSignedTransaction(tx.rawTransaction);
+        gameIdToNumber.delete(gameId);
+
+        console.log("Transaction Hash:", receipt.transactionHash);
+    } catch (err) {
+        console.error("Error:", err);
+    }
+}
+
+function sleep(ms){
+    return new Promise(resolve=>{
+        setTimeout(resolve,ms)
+    })
+}
+
 module.exports = {
     interact,
+    createGame,
+    addParticipantToGame,
+    kickParticipantFromGame,
+    updateQuestionCounter,
+    dealMoneyToWinner
 };