0x60806040523480156200001157600080fd5b5060405162001df638038062001df6833981810160405281019062000037919062000323565b6040518060400160405280600b81526020017f5748495445424954204a500000000000000000000000000000000000000000008152506040518060400160405280600381526020017f574a50000000000000000000000000000000000000000000000000000000000081525069d3c21bcecceda10000008260049081620000bf9190620005cf565b508160059081620000d19190620005cf565b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200012581336200012f60201b60201c565b50505050620007d1565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620001c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001b99062000717565b60405180910390fd5b620001d660008284620002b460201b60201c565b81600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000227919062000768565b925050819055508160008082825462000241919062000768565b925050819055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051620002a89190620007b4565b60405180910390a35050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002eb82620002be565b9050919050565b620002fd81620002de565b81146200030957600080fd5b50565b6000815190506200031d81620002f2565b92915050565b6000602082840312156200033c576200033b620002b9565b5b60006200034c848285016200030c565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003d757607f821691505b602082108103620003ed57620003ec6200038f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000418565b62000463868362000418565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004b0620004aa620004a4846200047b565b62000485565b6200047b565b9050919050565b6000819050919050565b620004cc836200048f565b620004e4620004db82620004b7565b84845462000425565b825550505050565b600090565b620004fb620004ec565b62000508818484620004c1565b505050565b5b81811015620005305762000524600082620004f1565b6001810190506200050e565b5050565b601f8211156200057f576200054981620003f3565b620005548462000408565b8101602085101562000564578190505b6200057c620005738562000408565b8301826200050d565b50505b505050565b600082821c905092915050565b6000620005a46000198460080262000584565b1980831691505092915050565b6000620005bf838362000591565b9150826002028217905092915050565b620005da8262000355565b67ffffffffffffffff811115620005f657620005f562000360565b5b620006028254620003be565b6200060f82828562000534565b600060209050601f83116001811462000647576000841562000632578287015190505b6200063e8582620005b1565b865550620006ae565b601f1984166200065786620003f3565b60005b8281101562000681578489015182556001820191506020850194506020810190506200065a565b86831015620006a157848901516200069d601f89168262000591565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4e6f7420616e206f776e65722100000000000000000000000000000000000000600082015250565b6000620006ff600d83620006b6565b91506200070c82620006c7565b602082019050919050565b600060208201905081810360008301526200073281620006f0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000775826200047b565b915062000782836200047b565b92508282019050808211156200079d576200079c62000739565b5b92915050565b620007ae816200047b565b82525050565b6000602082019050620007cb6000830184620007a3565b92915050565b61161580620007e16000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806370a082311161007157806370a082311461016757806394bf804d1461019757806395d89b41146101b35780639dc29fac146101d1578063a9059cbb146101ed578063dd62ed3e14610209576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd146100f357806323b872dd14610111578063313ce5671461012d5780633b3e672f1461014b575b600080fd5b6100c1610239565b6040516100ce9190610eef565b60405180910390f35b6100f160048036038101906100ec9190610faf565b6102cb565b005b6100fb6102da565b6040516101089190610ffe565b60405180910390f35b61012b60048036038101906101269190611019565b6102e3565b005b6101356105a5565b6040516101429190610ffe565b60405180910390f35b61016560048036038101906101609190611127565b6105ae565b005b610181600480360381019061017c91906111a8565b61081c565b60405161018e9190610ffe565b60405180910390f35b6101b160048036038101906101ac91906111d5565b610865565b005b6101bb6109d9565b6040516101c89190610eef565b60405180910390f35b6101eb60048036038101906101e69190610faf565b610a6b565b005b61020760048036038101906102029190610faf565b610b79565b005b610223600480360381019061021e9190611215565b610ce8565b6040516102309190610ffe565b60405180910390f35b60606004805461024890611284565b80601f016020809104026020016040519081016040528092919081815260200182805461027490611284565b80156102c15780601f10610296576101008083540402835291602001916102c1565b820191906000526020600020905b8154815290600101906020018083116102a457829003601f168201915b5050505050905090565b6102d6338383610d6f565b5050565b60008054905090565b8281806102ef8361081c565b1015610330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032790611301565b60405180910390fd5b61033b858585610e5a565b82600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156103fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f19061136d565b60405180910390fd5b82600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461048691906113bc565b9250508190555082600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104dc91906113bc565b9250508190555082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461053291906113f0565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516105969190610ffe565b60405180910390a35050505050565b60006012905090565b8181905084849050146105f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ed90611470565b60405180910390fd5b6000805b8585905081101561063f5783838281811061061857610617611490565b5b905060200201358261062a91906113f0565b91508080610637906114bf565b9150506105fa565b508061064a3361081c565b101561068b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068290611553565b60405180910390fd5b60005b858590508110156108145760008686838181106106ae576106ad611490565b5b90506020020160208101906106c391906111a8565b905060008585848181106106da576106d9611490565b5b9050602002013590506106ee338383610e5a565b80600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461073d91906113bc565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461079391906113f0565b925050819055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107f79190610ffe565b60405180910390a35050808061080c906114bf565b91505061068e565b505050505050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ec906115bf565b60405180910390fd5b61090160008284610e5a565b81600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461095091906113f0565b925050819055508160008082825461096891906113f0565b925050819055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516109cd9190610ffe565b60405180910390a35050565b6060600580546109e890611284565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1490611284565b8015610a615780601f10610a3657610100808354040283529160200191610a61565b820191906000526020600020905b815481529060010190602001808311610a4457829003601f168201915b5050505050905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af2906115bf565b60405180910390fd5b610b0782600083610e5a565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b5691906113bc565b9250508190555080600080828254610b6e91906113bc565b925050819055505050565b338180610b858361081c565b1015610bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbd90611301565b60405180910390fd5b610bd1338585610e5a565b82600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c2091906113bc565b9250508190555082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c7691906113f0565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610cda9190610ffe565b60405180910390a350505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610e4d9190610ffe565b60405180910390a3505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610e99578082015181840152602081019050610e7e565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ec182610e5f565b610ecb8185610e6a565b9350610edb818560208601610e7b565b610ee481610ea5565b840191505092915050565b60006020820190508181036000830152610f098184610eb6565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f4682610f1b565b9050919050565b610f5681610f3b565b8114610f6157600080fd5b50565b600081359050610f7381610f4d565b92915050565b6000819050919050565b610f8c81610f79565b8114610f9757600080fd5b50565b600081359050610fa981610f83565b92915050565b60008060408385031215610fc657610fc5610f11565b5b6000610fd485828601610f64565b9250506020610fe585828601610f9a565b9150509250929050565b610ff881610f79565b82525050565b60006020820190506110136000830184610fef565b92915050565b60008060006060848603121561103257611031610f11565b5b600061104086828701610f64565b935050602061105186828701610f64565b925050604061106286828701610f9a565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126110915761109061106c565b5b8235905067ffffffffffffffff8111156110ae576110ad611071565b5b6020830191508360208202830111156110ca576110c9611076565b5b9250929050565b60008083601f8401126110e7576110e661106c565b5b8235905067ffffffffffffffff81111561110457611103611071565b5b6020830191508360208202830111156111205761111f611076565b5b9250929050565b6000806000806040858703121561114157611140610f11565b5b600085013567ffffffffffffffff81111561115f5761115e610f16565b5b61116b8782880161107b565b9450945050602085013567ffffffffffffffff81111561118e5761118d610f16565b5b61119a878288016110d1565b925092505092959194509250565b6000602082840312156111be576111bd610f11565b5b60006111cc84828501610f64565b91505092915050565b600080604083850312156111ec576111eb610f11565b5b60006111fa85828601610f9a565b925050602061120b85828601610f64565b9150509250929050565b6000806040838503121561122c5761122b610f11565b5b600061123a85828601610f64565b925050602061124b85828601610f64565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061129c57607f821691505b6020821081036112af576112ae611255565b5b50919050565b7f4e6f7420656e6f75676820746f6b656e73210000000000000000000000000000600082015250565b60006112eb601283610e6a565b91506112f6826112b5565b602082019050919050565b6000602082019050818103600083015261131a816112de565b9050919050565b7f436865636b20616c6c6f77616e63652100000000000000000000000000000000600082015250565b6000611357601083610e6a565b915061136282611321565b602082019050919050565b600060208201905081810360008301526113868161134a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006113c782610f79565b91506113d283610f79565b92508282039050818111156113ea576113e961138d565b5b92915050565b60006113fb82610f79565b915061140683610f79565b925082820190508082111561141e5761141d61138d565b5b92915050565b7f496e76616c696420696e707574206c656e677468000000000000000000000000600082015250565b600061145a601483610e6a565b915061146582611424565b602082019050919050565b600060208201905081810360008301526114898161144d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006114ca82610f79565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114fc576114fb61138d565b5b600182019050919050565b7f4e6f7420656e6f75676820746f6b656e7320746f207472616e73666572000000600082015250565b600061153d601d83610e6a565b915061154882611507565b602082019050919050565b6000602082019050818103600083015261156c81611530565b9050919050565b7f4e6f7420616e206f776e65722100000000000000000000000000000000000000600082015250565b60006115a9600d83610e6a565b91506115b482611573565b602082019050919050565b600060208201905081810360008301526115d88161159c565b905091905056fea26469706673582212209d30889fd83785aedb0ba3c3272ee19ba0706828d27a786510b401eefbc35ea964736f6c63430008120033000000000000000000000000fefb9ed533cc6ba9589230337f8faa3d0e0f9ad9